home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / cd32test.s < prev    next >
Text File  |  1997-01-31  |  154KB  |  10,714 lines

  1. _break    macro
  2. ;    bkpt    \1
  3.     endm
  4.  
  5.  
  6. FILTER    macro
  7. ;    move.l    d0,-(sp)
  8. ;    move.l    #65000,d0
  9. ;.loop\@
  10. ;    bchg    #1,$bfe001
  11. ;    dbra    d0,.loop\@
  12. ;    move.l    (sp)+,d0
  13.     endm
  14.  
  15. BLACK    macro
  16.     move.w    #0,$dff180
  17.     endm
  18.  
  19. RED    macro
  20.     move.w    #$f00,$dff180
  21.     endm
  22.  
  23. FLASHER macro
  24.     movem.l    d1,-(sp)
  25.     move.w    #-1,d1
  26.  
  27. loop3\@
  28.     move.w    #\1,$dff180
  29.     nop
  30.     nop
  31.     move.w    #\2,$dff180
  32.     nop
  33.     nop
  34.     dbra    d1,loop3\@
  35.  
  36.     movem.l    (sp)+,d1
  37.  
  38.     endm
  39.  
  40. GREEN    macro
  41.     move.w    #$0f0,$dff180
  42.     endm
  43.  
  44. BLUE    macro
  45.     move.w    #$f,$dff180
  46.     endm
  47.  
  48. DataCacheOff macro
  49.     movem.l    a0-a6/d0-d7,-(sp)
  50.     move.l    4.w,a6
  51.     moveq    #0,d0
  52.     move.l    #%0000000100000000,d1
  53.     jsr    _LVOCacheControl(a6)
  54.     movem.l    (sp)+,a0-a6/d0-d7
  55.     endm
  56.  
  57. DataCacheOn macro
  58.     movem.l    a0-a6/d0-d7,-(sp)
  59.     move.l    4.w,a6
  60.     moveq    #-1,d0
  61.     move.l    #%0000000100000000,d1
  62.     jsr    _LVOCacheControl(a6)
  63.     movem.l    (sp)+,a0-a6/d0-d7
  64.     endm
  65.  
  66.     opt    P=68020
  67.  
  68.     include include:hardware/intbits.i
  69.  
  70. CD32VER equ 1
  71.  
  72. maxscrdiv EQU 8
  73. max3ddiv EQU 5
  74. playerheight EQU 12*1024
  75. playercrouched EQU 8*1024
  76. scrheight EQU 80
  77.  
  78. ; k/j/m
  79.  
  80. ; 4/8
  81. ; s/x
  82. ; b/n
  83.  
  84. midoffset EQU 104*4*40
  85.  
  86.  
  87.  SECTION Scrn,CODE
  88. OpenLib       equ -552
  89. CloseLib      equ -414
  90.  
  91. INTREQ        equ    $09C
  92. INTENA        equ    $09A
  93. INTENAR    equ    $01C
  94. DMACON        equ    $096
  95.  
  96. SERPER        equ    $032
  97. SERDATR    equ    $018
  98. SERDAT        equ    $030
  99. vhposr        equ $006    
  100. vhposrl    equ $007 
  101.  
  102. bltcon0    equ $40 
  103. bltcon1    equ $42
  104. bltcpt        equ $48
  105. bltbpt        equ $4c
  106. bltapt        equ $50
  107. spr0ctl    equ $142
  108. spr1ctl    equ $14a
  109. spr2ctl    equ $152
  110. spr3ctl    equ $15a
  111. spr4ctl    equ $162
  112. spr5ctl    equ $16a
  113. spr6ctl    equ $172
  114. spr7ctl    equ $17a
  115. spr0pos    equ $140
  116. spr1pos    equ $148
  117. spr2pos    equ $150
  118. spr3pos    equ $158
  119. spr4pos    equ $160
  120. spr5pos    equ $168
  121. spr6pos    equ $170
  122. spr7pos    equ $178
  123. bltdpt         equ $54
  124. bltafwm    equ $44
  125. bltalwm    equ $46
  126. bltsize         equ $58
  127. bltcmod         equ $60
  128. bltbmod         equ $62
  129. bltamod         equ $64
  130. bltdmod         equ $66
  131. diwstart        equ $8e         ; Screen hardware registers.
  132. diwstop         equ $90
  133. ddfstart        equ $92
  134. ddfstop         equ $94
  135. bplcon0         equ $100
  136. bplcon1         equ $102
  137. col0            equ $180
  138. col1            equ $182
  139. col2        equ $184
  140. col3        equ $186
  141. col4        equ $188
  142. col5        equ $18a
  143. col6        equ $18c
  144. col7        equ $18e
  145. col8            equ $190
  146. col9            equ $192
  147. col10           equ $194
  148. col11           equ $196
  149. col12           equ $198
  150. col13           equ $19a
  151. dmacon        equ $96
  152. dmaconr        equ $002
  153. intenar        equ $01c
  154. intena        equ $09a
  155. intreq        equ $09c
  156. intreqr        equ $01e
  157. intreqrl    equ $01f
  158. bpl1pth         equ $e0
  159. bpl1ptl         equ $e2
  160. bpl2pth        equ $e4
  161. bpl2ptl        equ $e6
  162. bpl3pth        equ $e8
  163. bpl3ptl        equ $ea
  164. bpl4pth        equ $ec
  165. bpl4ptl        equ $ee
  166. bpl5pth        equ $f0
  167. bpl5ptl        equ $f2
  168. bpl6pth        equ $f4
  169. bpl6ptl        equ $f6
  170. bpl7pth        equ $f8
  171. bpl7ptl        equ $fa
  172. bpl8pth        equ $fc
  173. bpl8ptl        equ $fe
  174. spr0pth        equ $120
  175. spr0ptl        equ $122
  176. spr1pth        equ $124
  177. spr1ptl        equ $126
  178. spr2pth        equ $128
  179. spr2ptl        equ $12a
  180. spr3pth        equ $12c
  181. spr3ptl        equ $12e
  182. spr4pth        equ $130
  183. spr4ptl        equ $132
  184. spr5pth        equ $134
  185. spr5ptl        equ $136
  186. spr6pth        equ $138
  187. spr6ptl        equ $13a
  188. spr7pth        equ $13c
  189. spr7ptl        equ $13e
  190. adkcon        equ   $09E
  191.  
  192.  
  193. ; move.l #length,d0
  194. ; moveq.l #2,d1    ; chipmem
  195. ; move.l 4.w,a6
  196. ; jsr allocmem(a6) = -198
  197.  
  198. ; tst.l d0
  199. ; beq.s ohbugger
  200. ; move.l d0,memaddr
  201.  
  202.  
  203. ; move.l 4.w,a6
  204. ; move.l memaddr,a1
  205. ; move.l #size,d0
  206. ; jsr freemem(a6) =-210
  207.  
  208.  
  209. ** This waits for the blitter to finish before allowing program
  210. ** execution to continue.
  211.  
  212.  
  213.  include "ab3:source/protsetupdecode"
  214.  
  215. SAVEREGS MACRO
  216.  movem.l d0-d7/a0-a6,-(a7)
  217.  ENDM
  218.  
  219. GETREGS MACRO
  220.  movem.l (a7)+,d0-d7/a0-a6
  221.  ENDM
  222.  
  223.  
  224. WB MACRO
  225. \@bf:
  226.  btst #6,dmaconr(a6)
  227.  bne.s \@bf
  228.  ENDM
  229.  
  230. WBa MACRO
  231. \@bf:
  232.  move.w #\2,$dff180
  233.  
  234.  btst #6,$bfe001
  235.  bne.s \@bf
  236. \@bz:
  237.  
  238.  move.w #$f0f,$dff180
  239.  
  240.  btst #6,$bfe001
  241.  beq.s \@bz
  242.  
  243.  ENDM
  244.  
  245. *Another version for when a6 <> dff000
  246.  
  247. WBSLOW MACRO
  248. \@bf:
  249.  btst #6,$dff000+dmaconr
  250.  bne.s \@bf
  251.  ENDM
  252.  
  253. WT MACRO
  254. \@bf:
  255.  btst #6,(a3)
  256.  bne.s \@bd
  257.  rts
  258. \@bd: 
  259.  btst #4,(a0)
  260.  beq.s \@bf
  261.  ENDM
  262.  
  263. WTNOT MACRO
  264. \@bf:
  265.  btst #6,(a3)
  266.  bne.s \@bd
  267.  rts
  268. \@bd: 
  269.  btst #4,(a0)
  270.  bne.s \@bf
  271.  ENDM
  272.  
  273. **
  274.  
  275.  include "ab3:source/ProtectionProtection"
  276.  include "macros.i"
  277.  include "ab3:source/defs.i"
  278.  
  279.  move.w (a0)+,mors
  280.  
  281. ;    FLASHER $0f0,$fff
  282.  
  283. ; PROTFCALC
  284. ; PROTGCALC
  285. ; PROTHCALC
  286. ; PROTICALC
  287. ; PROTKCALC
  288. ; PROTLCALC
  289. ; PROTMCALC
  290.  
  291.  
  292.  
  293.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  294.  move.w intenar(a6),_storeint
  295.  and.w #$c000,_storeint
  296.  
  297.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  298.  
  299.  
  300.  st GOURSEL
  301.  
  302.  move.l 4.w,a6
  303.  lea VBLANKInt(pc),a1
  304.  moveq #INTB_COPER,d0
  305.  jsr _LVOAddIntServer(a6)
  306.  
  307.     IFNE CD32VER
  308.  move.l 4.w,a6
  309.  lea KEYInt(pc),a1
  310.  moveq #INTB_PORTS,d0
  311. ; jsr _LVOAddIntServer(a6)
  312.     ENDC
  313.     
  314.  move.l 4.w,a6
  315.  jsr _LVOSuperState(a6)
  316.  move.l d0,SSTACK
  317.  
  318.  DataCacheOff
  319. ; DATA_CACHE_OFF d2
  320.  
  321.  move.l 4.w,a6
  322.  move.l SSTACK,d0
  323.  jsr _LVOUserState(a6)
  324.  
  325.  
  326.  IFNE CD32VER
  327.  clr.b PLR1KEYS
  328.  clr.b PLR1PATH
  329.  clr.b PLR1MOUSE
  330.  st PLR1JOY
  331.  clr.b PLR2KEYS
  332.  clr.b PLR2PATH
  333.  clr.b PLR2MOUSE
  334.  st PLR2JOY
  335.  ELSE
  336.  st PLR1KEYS
  337.  clr.b PLR1PATH
  338.  clr.b PLR1MOUSE
  339.  clr.b PLR1JOY
  340.  st PLR2KEYS
  341.  clr.b PLR2PATH
  342.  clr.b PLR2MOUSE
  343.  clr.b PLR2JOY
  344.  ENDC
  345.  
  346.  PRSDO
  347.  
  348.  move.l #2,d1    
  349.  move.l #10240*2,d0
  350.  move.l 4.w,a6
  351.  jsr -198(a6)
  352.  move.l d0,TEXTSCRN
  353.  move.w d0,TSPTl
  354.  swap d0
  355.  move.w d0,TSPTh
  356.  
  357.  move.l #nullspr,d0
  358.  move.w d0,txs0l
  359.  move.w d0,txs1l
  360.  move.w d0,txs2l
  361.  move.w d0,txs3l
  362.  move.w d0,txs4l
  363.  move.w d0,txs5l
  364.  move.w d0,txs6l
  365.  move.w d0,txs7l
  366.  swap d0
  367.  move.w d0,txs0h
  368.  move.w d0,txs1h
  369.  move.w d0,txs2h
  370.  move.w d0,txs3h
  371.  move.w d0,txs4h
  372.  move.w d0,txs5h
  373.  move.w d0,txs6h
  374.  move.w d0,txs7h 
  375.  
  376.  move.l #1,d1    
  377.  move.l #120000,d0
  378.  move.l 4.w,a6
  379.  jsr -198(a6)
  380.  move.l d0,LEVELDATA
  381.  
  382.  
  383.  jsr START
  384.  
  385.  rts
  386.  
  387. _storeint
  388.     dc.w 0
  389.  
  390. * Load level into buffers.
  391.  clr.b doanything
  392.  
  393. ; DRAW TEXT SCREEN
  394.  
  395. TWEENTEXT:
  396.  
  397.  move.l #LEVELTEXT,a0
  398.  move.w PLOPT,d0
  399.  muls #82*16,d0
  400.  add.l d0,a0
  401.  
  402.  move.w #14,d7
  403.  move.w #0,d0
  404. DOWNTEXT:
  405.  move.l TEXTSCRN,a1
  406.  jsr DRAWLINEOFTEXT
  407.  addq #1,d0
  408.  add.w #82,a0
  409.  dbra d7,DOWNTEXT
  410.  rts
  411.  
  412. FONTADDRS:
  413.  dc.l ENDFONT0,CHARWIDTHS0
  414.  dc.l ENDFONT1,CHARWIDTHS1
  415.  dc.l ENDFONT2,CHARWIDTHS2
  416.  
  417. ENDFONT0:
  418.  incbin "endfont0"
  419. CHARWIDTHS0:
  420.  incbin "charwidths0"
  421. ENDFONT1:
  422.  incbin "endfont1"
  423. CHARWIDTHS1:
  424.  incbin "charwidths1"
  425. ENDFONT2:
  426.  incbin "endfont2"
  427. CHARWIDTHS2:
  428.  incbin "charwidths2"
  429.  
  430.  even
  431.  
  432. DRAWLINEOFTEXT:
  433.  movem.l d0/a0/d7,-(a7)
  434.  
  435.  muls #80*16,d0
  436.  add.l d0,a1    ; screen pointer
  437.  
  438.  move.l #FONTADDRS,a3
  439.  moveq #0,d0
  440.  move.b (a0)+,d0
  441.  move.l (a3,d0.w*8),a2
  442.  move.l 4(a3,d0.w*8),a3
  443.  
  444.  moveq #0,d1    ; width counter:
  445.  move.w #79,d6
  446.  tst.b (a0)+
  447.  beq.s NOTCENTRED
  448.  moveq #-1,d5
  449.  move.l a0,a4
  450.  moveq #0,d2
  451.  moveq #0,d3
  452.  move.w #79,d0    ; number of chars
  453. .addup:
  454.  addq #1,d5
  455.  move.b (a4)+,d2
  456.  move.b -32(a3,d2.w),d4
  457.  add.w d4,d3
  458.  cmp.b #32,d2
  459.  beq.s .DONTPUTIN
  460.  move.w d5,d6
  461.  move.w d3,d1
  462. .DONTPUTIN:
  463.  dbra d0,.addup
  464.  asr.w #1,d1
  465.  neg.w d1
  466.  add.w #320,d1    ; horiz pos of start x
  467.  
  468. NOTCENTRED:
  469.  move.w d6,d7
  470. DOACHAR:
  471.  moveq #0,d2
  472.  move.b (a0)+,d2
  473.  sub.w #32,d2
  474.  moveq #0,d6
  475.  move.b (a3,d2.w),d6
  476.  asl.w #5,d2
  477.  lea (a2,d2.w),a4    ; char font
  478. val SET 0
  479.  REPT 16
  480.  move.w (a4)+,d0
  481.  bfins d0,val(a1){d1:d6}
  482. val SET val+80
  483.  ENDR
  484.  add.w d6,d1
  485.  dbra d7,DOACHAR
  486.  movem.l (a7)+,d0/a0/d7
  487.  rts 
  488.  
  489.  
  490. CLRTWEENSCRN:
  491.  move.l TEXTSCRN,a0
  492.  move.w #(10240/16)-1,d0
  493.  move.l #$0,d1
  494. .lll
  495.  move.l d1,(a0)+
  496.  move.l d1,(a0)+
  497.  move.l d1,(a0)+
  498.  move.l d1,(a0)+
  499.  move.l d1,(a0)+
  500.  move.l d1,(a0)+
  501.  move.l d1,(a0)+
  502.  move.l d1,(a0)+
  503.  dbra d0,.lll
  504.  rts
  505.  
  506. PLAYTHEGAME:
  507.  
  508.  move.w #0,TXTCOLL
  509.  
  510.  bsr CLRTWEENSCRN
  511.  
  512.  cmp.b #'n',mors
  513.  bne.s .notext
  514.  bsr TWEENTEXT
  515. .notext
  516.  
  517.  move.l #TEXTCOP,$dff080
  518.  
  519.  move.w #$10,d0
  520.  move.w #7,d1
  521.  
  522. .fdup
  523.  move.w d0,TXTCOLL
  524.  add.w #$121,d0
  525. .wtframe:
  526.  btst #5,$dff000+intreqrl
  527.  beq.s .wtframe
  528.  move.w #$0020,$dff000+intreq
  529.  dbra d1,.fdup
  530.  
  531.  jsr INITCOPPERSCRN
  532.  
  533. ; Get level memory.
  534.  
  535.  move.l #1,d1
  536.  move.l #50000,d0
  537.  move.l 4.w,a6
  538.  jsr -198(a6)
  539.  move.l d0,LEVELGRAPHICS
  540.  
  541.  move.l #1,d1
  542.  move.l #40000,d0
  543.  move.l 4.w,a6
  544.  jsr -198(a6)
  545.  move.l d0,LEVELCLIPS
  546.  
  547.  move.l #$dff000,a6
  548.  jsr SETPLAYERS
  549.  
  550. ; move.l #LEVELDATAD,LEVELDATA
  551. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  552. ; move.l #LEVELCLIPSD,LEVELCLIPS
  553.  
  554. ; bra noload
  555.  
  556.  move.l doslib,a6
  557.  move.l #LDname,d1
  558.  move.l #1005,d2
  559.  jsr -30(a6)
  560.  move.l d0,LDhandle
  561.  
  562.  move.l doslib,a6
  563.  move.l d0,d1
  564.  move.l LEVELCLIPS,d2
  565.  move.l #40000,d3
  566.  jsr -42(a6)
  567.  
  568.  move.l doslib,a6
  569.  move.l LDhandle,d1
  570.  jsr -36(a6)
  571.  
  572. *************************************
  573.     move.l    LEVELCLIPS,d0
  574.     moveq    #0,d1
  575.     move.l LEVELDATA,a0
  576.     lea    WorkSpace,a1
  577.     lea    $0,a2
  578.     jsr    unLHA
  579. *************************************
  580.  
  581. ********
  582.  
  583.  move.l doslib,a6
  584.  move.l #LGname,d1
  585.  move.l #1005,d2
  586.  jsr -30(a6)
  587.  move.l d0,LGhandle
  588.  
  589.  move.l doslib,a6
  590.  move.l d0,d1
  591.  move.l LEVELCLIPS,d2
  592.  move.l #40000,d3
  593.  jsr -42(a6)
  594.  
  595.  move.l doslib,a6
  596.  move.l LGhandle,d1
  597.  jsr -36(a6)
  598.  
  599. *************************************
  600.     move.l    LEVELCLIPS,d0
  601.     moveq    #0,d1
  602.     move.l LEVELGRAPHICS,a0
  603.     lea    WorkSpace,a1
  604.     lea    $0,a2
  605.     jsr    unLHA
  606. *************************************
  607.  
  608.  
  609. ********
  610.  
  611.  move.l doslib,a6
  612.  move.l #LCname,d1
  613.  move.l #1005,d2
  614.  jsr -30(a6)
  615.  move.l d0,LChandle
  616.  
  617.  move.l doslib,a6
  618.  move.l d0,d1
  619.  move.l #WorkSpace+16384,d2
  620.  move.l #16000,d3
  621.  jsr -42(a6)
  622.  
  623.  move.l doslib,a6
  624.  move.l LChandle,d1
  625.  jsr -36(a6)
  626.  
  627. *************************************
  628.     move.l    #WorkSpace+16384,d0
  629.     moveq    #0,d1
  630.     move.l LEVELCLIPS,a0
  631.     lea    WorkSpace,a1
  632.     lea    $0,a2
  633.     jsr    unLHA
  634. *************************************
  635.  
  636.  
  637. *******
  638.  
  639. noload:
  640.  
  641. ********
  642.  
  643. ; move.l doslib,a6
  644. ; move.l #Prefsname,d1
  645. ; move.l #1005,d2
  646. ; jsr -30(a6)
  647. ; move.l d0,Prefshandle
  648.  
  649. ; move.l doslib,a6
  650. ; move.l d0,d1
  651. ; move.l #Prefsfile,d2
  652. ; move.l #50,d3
  653. ; jsr -42(a6)
  654.  
  655. ; move.l doslib,a6
  656. ; move.l Prefshandle,d1
  657. ; jsr -36(a6)
  658.  
  659. *******
  660.  
  661.  cmp.b #'s',Prefsfile+2
  662.  seq STEREO
  663.  
  664.  IFNE CD32VER
  665.  move.l doslib,a6
  666.  move.l #115,d1
  667.  jsr -198(a6)
  668.  ENDC
  669.  
  670.  
  671. ; move.l doslib,d0
  672. ; move.l d0,a1
  673. ; move.l 4.w,a6
  674. ; jsr CloseLib(a6)
  675.  
  676.  move.l #$dff000,a6
  677.  
  678. charlie:
  679. ; jmp  ENDGAMESCROLL
  680.  
  681.     move.w #$87c0,dmacon(a6)
  682.  
  683.     move.w    #%1000000000100000,dmacon(a6)
  684.  
  685. ; move.w intenar(a6),saveinters
  686.     
  687.     move.w #%00101111,intena(a6)
  688.  
  689.     move.w #255,adkcon(a6)
  690.  
  691.  
  692. *** Put myself in supervisor mode
  693.  
  694.  bra blag
  695. ; move.l $6c,d0
  696. ; move.l #blag,$6c
  697. ; move.w #$8010,intreq(a6)
  698.  
  699.  rts
  700.  
  701. saveit: ds.l 10
  702. doslibname: dc.b 'dos.library',0
  703.  even
  704. doslib: dc.l 0
  705.  
  706. mors: dc.w 0
  707.  
  708. LDname: dc.b 'ab3d2:levels/level_'
  709. LEVA:
  710.  dc.b 'a/twolev.bin',0
  711.  even
  712. LDhandle: dc.l 0
  713. LGname: dc.b 'ab3d2:levels/level_'
  714. LEVB:
  715.  dc.b 'a/twolev.graph.bin',0
  716.  even
  717. LGhandle: dc.l 0
  718. LCname: dc.b 'ab3d2:levels/level_'
  719. LEVC:
  720.  dc.b 'a/twolev.clips',0
  721.  even
  722. LChandle: dc.l 0
  723.  
  724.     cnop    0,4
  725.  
  726. Prefsname: dc.b 'ram:prefs',0
  727.  even
  728. Prefshandle: dc.l 0
  729.  
  730. Prefsfile:
  731.  dc.b 'k4nx'
  732.  ds.b 50
  733.  
  734.  even
  735.  
  736.  cnop 0,4
  737.  
  738. VBLANKInt
  739.  dc.l 0,0
  740.  dc.b NT_INTERRUPT,9
  741.  dc.l Prefsname
  742.  dc.l 0
  743.  dc.l Chan0inter
  744.  
  745.  
  746. KEYInt
  747.  dc.l 0,0
  748.  dc.b NT_INTERRUPT,127
  749.  dc.l Prefsname
  750.  dc.l 0
  751.  dc.l key_interrupt
  752.  
  753.  
  754. blag:
  755. ; move.w #$10,intreq(a6)
  756. ; move.l d0,$6c
  757. ; move.w #$7fff,intena(a6)
  758.  
  759. ; move.w #$20,$dff1dc
  760.  
  761. ; move.l 4.w,a6
  762. ; lea VBLANKInt(pc),a1
  763. ; moveq #INTB_COPER,d0
  764. ; jsr _LVOAddIntServer(a6)
  765.  
  766. ****************************
  767. * Initialize level
  768. ****************************
  769. * Poke all clip offsets into
  770. * correct bit of level data.
  771. ****************************
  772.  move.l LEVELGRAPHICS,a0
  773.  move.l 12(a0),a1
  774.  add.l a0,a1
  775.  move.l a1,ZoneGraphAdds
  776.  move.l (a0),a1
  777.  add.l a0,a1
  778.  move.l a1,DoorData
  779.  move.l 4(a0),a1
  780.  add.l a0,a1
  781.  move.l a1,LiftData
  782.  move.l 8(a0),a1
  783.  add.l a0,a1
  784.  move.l a1,SwitchData
  785.  adda.w #16,a0
  786.  move.l a0,ZoneAdds
  787.  
  788.  move.l LEVELDATA,a1
  789.  move.l 16+6(a1),a2
  790.  add.l a1,a2
  791.  move.l a2,Points
  792.  move.w 8+6(a1),d0
  793.  lea 4(a2,d0.w*4),a2
  794.  move.l a2,PointBrights
  795.  
  796.  move.l 20+6(a1),a2
  797.  add.l a1,a2
  798.  move.l a2,FloorLines
  799.  move.l 24+6(a1),a2
  800.  add.l a1,a2
  801.  move.l a2,ObjectData
  802. *****************************************
  803. * Just for charles
  804.  
  805. ; move.w #$6060,6(a2)
  806. ; move.l #$d0000,8(a2)
  807. ; sub.w #40,4(a2)
  808. ; move.w #45*256+45,14(a2)
  809. ****************************************
  810.  move.l 28+6(a1),a2
  811.  add.l a1,a2
  812.  move.l a2,PlayerShotData
  813.  move.l 32+6(a1),a2
  814.  add.l a1,a2
  815.  move.l a2,NastyShotData
  816.  
  817.  add.l #64*20,a2
  818.  move.l a2,OtherNastyData
  819.  
  820.  move.l 36+6(a1),a2
  821.  add.l a1,a2
  822.  move.l a2,ObjectPoints  
  823.  move.l 40+6(a1),a2
  824.  add.l a1,a2
  825.  move.l a2,PLR1_Obj
  826.  move.l 44+6(a1),a2
  827.  add.l a1,a2
  828.  move.l a2,PLR2_Obj
  829.  move.w 14+6(a1),NumObjectPoints
  830.  
  831. ; bra noclips
  832.   
  833.  move.l LEVELCLIPS,a2
  834.  moveq #0,d0
  835.  move.w 10+6(a1),d7    ;numzones
  836. assignclips:
  837.  move.l (a0)+,a3
  838.  add.l a1,a3    ; pointer to a zone
  839.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  840. dowholezone:
  841.  tst.w (a3)
  842.  blt.s nomorethiszone
  843.  tst.w 2(a3)
  844.  blt.s thisonenull
  845.  
  846.  move.l d0,d1
  847.  asr.l #1,d1
  848.  move.w d1,2(a3)
  849.  
  850. findnextclip:
  851.  cmp.w #-2,(a2,d0.l)
  852.  beq.s foundnextclip
  853.  addq.l #2,d0
  854.  bra.s findnextclip
  855. foundnextclip
  856.  addq.l #2,d0
  857.  
  858. thisonenull:
  859.  addq #8,a3 
  860.  bra.s dowholezone
  861. nomorethiszone:
  862.  dbra d7,assignclips
  863.  
  864.  lea (a2,d0.l),a2
  865.  move.l a2,CONNECT_TABLE
  866.  
  867. noclips:
  868.  
  869. * Put in addresses of glowything
  870.  
  871.  
  872. ************************************
  873.  
  874. ; cmp.b #'k',Prefsfile
  875. ; bne.s nkb
  876.  
  877. ;nkb:
  878. ; cmp.b #'m',Prefsfile
  879. ; bne.s nmc
  880. ; clr.b PLR1KEYS
  881. ; clr.b PLR1PATH
  882. ; st PLR1MOUSE
  883. ; clr.b PLR1JOY
  884. ;nmc:
  885. ; cmp.b #'j',Prefsfile
  886. ; bne.s njc
  887. ; clr.b PLR1KEYS
  888. ; clr.b PLR1PATH
  889. ; clr.b PLR1MOUSE
  890. ; st PLR1JOY
  891. ;njc:
  892.  
  893.  clr.b PLR1_StoodInTop
  894.  move.l #playerheight,PLR1s_height
  895.  
  896.  move.l #empty,pos1LEFT
  897.  move.l #empty,pos2LEFT
  898.  move.l #empty,pos1RIGHT
  899.  move.l #empty,pos2RIGHT
  900.  move.l #emptyend,Samp0endLEFT
  901.  move.l #emptyend,Samp1endLEFT
  902.  move.l #emptyend,Samp0endRIGHT
  903.  move.l #emptyend,Samp1endRIGHT
  904.  
  905.  move.l #nullspr,d0
  906.  move.w d0,s4l
  907.  move.w d0,s5l
  908.  move.w d0,s6l
  909.  move.w d0,s7l
  910.  swap d0
  911.  move.w d0,s4h
  912.  move.w d0,s5h
  913.  move.w d0,s6h
  914.  move.w d0,s7h 
  915.  
  916.  move.l #nullline,d0
  917.  move.w d0,n1l
  918.  swap d0
  919.  move.w d0,n1h
  920.  
  921.  move.l Panel,d0
  922.  move.w d0,p1l
  923.  swap d0
  924.  move.w d0,p1h
  925.  swap d0
  926.  add.l #40,d0
  927.  move.w d0,p2l
  928.  swap d0
  929.  move.w d0,p2h
  930.  swap d0
  931.  add.l #40,d0
  932.  move.w d0,p3l
  933.  swap d0
  934.  move.w d0,p3h
  935.  swap d0
  936.  add.l #40,d0
  937.  move.w d0,p4l
  938.  swap d0
  939.  move.w d0,p4h
  940.  swap d0
  941.  add.l #40,d0
  942.  move.w d0,p5l
  943.  swap d0
  944.  move.w d0,p5h
  945.  swap d0
  946.  add.l #40,d0
  947.  move.w d0,p6l
  948.  swap d0
  949.  move.w d0,p6h
  950.  swap d0
  951.  add.l #40,d0
  952.  move.w d0,p7l
  953.  swap d0
  954.  move.w d0,p7h
  955.  swap d0
  956.  add.l #40,d0
  957.  move.w d0,p8l
  958.  swap d0
  959.  move.w d0,p8h
  960.  
  961. *******************************
  962. * TIMER SCREEN SETUP
  963. ; move.l #TimerScr,d0
  964. ; move.w d0,p1l
  965. ; swap d0
  966. ; move.w d0,p1h
  967. ; move.w #$1201,Panelcon
  968.  
  969.  move.l #borders,d0
  970.  move.w d0,s0l
  971.  swap d0
  972.  move.w d0,s0h
  973.  move.l #borders+2592,d0
  974.  move.w d0,s1l
  975.  swap d0
  976.  move.w d0,s1h
  977.  move.l #borders+2592*2,d0
  978.  move.w d0,s2l
  979.  swap d0
  980.  move.w d0,s2h
  981.  move.l #borders+2592*3,d0
  982.  move.w d0,s3l
  983.  swap d0
  984.  move.w d0,s3h
  985.  
  986.  move.w #52*256+64,borders
  987.  move.w #212*256+0,borders+8
  988.  move.w #52*256+64,borders+2592
  989.  move.w #212*256+128,borders+8+2592
  990.  move.w #52*256+192,borders+2592*2
  991.  move.w #212*256+0,borders+8+2592*2
  992.  move.w #52*256+192,borders+2592*3
  993.  move.w #212*256+128,borders+8+2592*3
  994.  
  995.  move.l #FacePlace,d0
  996.  move.w d0,f1l
  997.  swap d0
  998.  move.w d0,f1h
  999.  move.l #FacePlace+32*24,d0
  1000.  move.w d0,f2l
  1001.  swap d0
  1002.  move.w d0,f2h
  1003.  move.l #FacePlace+32*24*2,d0
  1004.  move.w d0,f3l
  1005.  swap d0
  1006.  move.w d0,f3h
  1007.  move.l #FacePlace+32*24*3,d0
  1008.  move.w d0,f4l
  1009.  swap d0
  1010.  move.w d0,f4h
  1011.  move.l #FacePlace+32*24*4,d0
  1012.  move.w d0,f5l
  1013.  swap d0
  1014.  move.w d0,f5h
  1015.   
  1016.  
  1017.  move.l #bigfield,d0
  1018.  move.w d0,ocl
  1019.  swap d0
  1020.  move.w d0,och
  1021.  
  1022.  bset.b #1,$bfe001
  1023.  
  1024. ; jmp stuff
  1025. ;endstuff:
  1026.  
  1027.  move.w #$00ff,$dff09e
  1028.  
  1029. ; move.l #Blurbfield,$dff080
  1030.  
  1031.  move.w #0,d0
  1032.  
  1033.  move.l #scrn,d0
  1034.  move.w d0,pl1l
  1035.  swap d0
  1036.  move.w d0,pl1h
  1037.  
  1038.  move.l #scrn+40,d0
  1039.  move.w d0,pl2l
  1040.  swap d0
  1041.  move.w d0,pl2h
  1042.  
  1043.  move.l #scrn+80,d0
  1044.  move.w d0,pl3l
  1045.  swap d0
  1046.  move.w d0,pl3h
  1047.  
  1048.  move.l #scrn+120,d0
  1049.  move.w d0,pl4l
  1050.  swap d0
  1051.  move.w d0,pl4h
  1052.  
  1053.  move.l #scrn+160,d0
  1054.  move.w d0,pl5l
  1055.  swap d0
  1056.  move.w d0,pl5h
  1057.  
  1058.  move.l #scrn+200,d0
  1059.  move.w d0,pl6l
  1060.  swap d0
  1061.  move.w d0,pl6h
  1062.  
  1063.  move.l #scrn+240,d0
  1064.  move.w d0,pl7l
  1065.  swap d0
  1066.  move.w d0,pl7h
  1067.  
  1068.  
  1069. ****************************
  1070.  jsr INITPLAYER
  1071. ; bsr initobjpos
  1072. ****************************
  1073.  
  1074.  
  1075.  move.l #$dff000,a6
  1076.  
  1077.  move.l #null,$dff0a0
  1078.  move.w #100,$dff0a4
  1079.  move.w #443,$dff0a6
  1080.  move.w #63,$dff0a8
  1081.  
  1082.  move.l #null2,$dff0b0
  1083.  move.w #100,$dff0b4
  1084.  move.w #443,$dff0b6
  1085.  move.w #63,$dff0b8
  1086.  
  1087.  move.l #null4,$dff0c0
  1088.  move.w #100,$dff0c4
  1089.  move.w #443,$dff0c6
  1090.  move.w #63,$dff0c8
  1091.  
  1092.  move.l #null3,$dff0d0
  1093.  move.w #100,$dff0d4
  1094.  move.w #443,$dff0d6
  1095.  move.w #63,$dff0d8
  1096.  
  1097.  move.l #tab,a1
  1098.  move.w #64,d7
  1099.  move.w #0,d6
  1100. outerlop
  1101.  move.l #pretab,a0
  1102.  move.w #255,d5
  1103. scaledownlop:
  1104.  move.b (a0)+,d0
  1105.  ext.w d0
  1106.  ext.l d0
  1107.  muls d6,d0
  1108.  asr.l #6,d0
  1109.  move.b d0,(a1)+
  1110.  dbra d5,scaledownlop
  1111.  addq #1,d6
  1112.  dbra d7,outerlop
  1113.  
  1114.  move.l #$dff000,a6
  1115.  
  1116.  move.w #$c018,intena(a6)
  1117.  
  1118.  move.w #$f,dmacon(a6)
  1119.  move.w #$820f,dmacon(a6)
  1120.  
  1121. ; bsr protinit
  1122.  
  1123.  
  1124. ; move.w #$20,$1dc(a6)
  1125.  
  1126.  move.w #$0,$dff034
  1127.  move.w #0,Conditions
  1128.  
  1129.  cmp.b #'n',mors
  1130.  beq.s .nokeys
  1131.  move.w #%111111111111,Conditions
  1132. .nokeys:
  1133.  
  1134.  move.l #KeyMap,a5
  1135.  clr.b $45(a5)
  1136.  
  1137.  move.l #ingame,mt_data
  1138.  clr.b UseAllChannels
  1139.  
  1140. ; cmp.b #'b',Prefsfile+3
  1141. ; bne.s .noback
  1142. ; jsr mt_init
  1143. ;.noback:
  1144. ;
  1145. ; clr.b CHANNELDATA
  1146. ; clr.b CHANNELDATA+8
  1147. ; clr.b CHANNELDATA+16
  1148. ; clr.b CHANNELDATA+24
  1149. ;
  1150. ; cmp.b #'b',Prefsfile+3
  1151. ; bne.s noreserve
  1152. ;
  1153. ; st CHANNELDATA
  1154. ; st CHANNELDATA+8
  1155. ; st CHANNELDATA+16
  1156. ; st CHANNELDATA+24
  1157. ;noreserve: 
  1158.  
  1159. ; st CHANNELDATA
  1160. ; st CHANNELDATA+8
  1161.  
  1162.  move.l SampleList+6*8,pos0LEFT
  1163.  move.l SampleList+6*8+4,Samp0endLEFT
  1164.  move.l #playerheight,PLR1s_targheight
  1165.  move.l #playerheight,PLR1s_height
  1166.  move.l #playerheight,PLR2s_targheight
  1167.  move.l #playerheight,PLR2s_height
  1168.  
  1169. ; cmp.b #'n',mors
  1170. ; beq.s nohandshake
  1171. ;
  1172. ; move.b #%11011000,$bfd200
  1173. ; move.b #%00010000,$bfd000
  1174. ;waitloop:
  1175. ; btst.b #4,$bfd000
  1176. ; bne.s waitloop
  1177. ; move.b #%11000000,$bfd200
  1178.  
  1179. ;wtmouse:
  1180. ; btst #6,$bfe001
  1181. ; bne.s wtmouse
  1182.  
  1183. ;nohandshake:
  1184.  
  1185. ; jmp end
  1186.  
  1187.  move.l COPSCRN1,drawpt
  1188.  move.l COPSCRN2,olddrawpt
  1189.  
  1190.  jsr CLEARKEYBOARD
  1191.  jsr MAKEBACKROUT
  1192.  
  1193.  clr.b MASTERQUITTING
  1194.  
  1195.  cmp.b #'n',mors
  1196.  seq SLAVEQUITTING
  1197.  
  1198.  move.w #127,PLR2_energy
  1199.  
  1200. ; move.l #ANOTHERSUP,$80
  1201. ; trap #0
  1202. ; rts
  1203. ;
  1204. ;ANOTHERSUP:
  1205.  
  1206.  move.l $4.w,a6
  1207.  jsr _LVOSuperState(a6)
  1208.  move.l d0,SSTACK
  1209.  
  1210.  CACHE_FREEZE_OFF d2
  1211.  
  1212. ; charlie
  1213. ; DATA_CACHE_ON d2
  1214.  
  1215.  DataCacheOn
  1216.  
  1217.  move.l $4.w,a6
  1218.  move.l SSTACK,d0
  1219.  jsr _LVOUserState(a6)
  1220.  
  1221.  move.w #0,hitcol
  1222.  move.w #0,hitcol2
  1223.  
  1224.  cmp.b #'n',mors
  1225.  bne.s NOCLTXT
  1226.  
  1227.  move.b #0,lastpressed
  1228. .wtpress
  1229.  btst #6,$bfe001
  1230.  beq.s CLOSETXT
  1231.  btst #7,$bfe001
  1232.  beq.s CLOSETXT
  1233.  tst.b lastpressed
  1234.  beq.s .wtpress
  1235.  
  1236. CLOSETXT:
  1237.  
  1238.  move.w #$8f8,d0
  1239.  move.w #7,d1
  1240.  
  1241. .fdup
  1242.  move.w d0,TXTCOLL
  1243.  sub.w #$121,d0
  1244. .wtframe:
  1245.  btst #5,$dff000+intreqrl
  1246.  beq.s .wtframe
  1247.  move.w #$0020,$dff000+intreq
  1248.  dbra d1,.fdup
  1249.  
  1250.  move.w #0,TXTCOLL
  1251.  
  1252. NOCLTXT:
  1253.  
  1254.  
  1255.  
  1256.     move.l    4.w,a6
  1257.     jsr    _LVOForbid(a6)
  1258. ;    jsr    _LVODisable(a6)
  1259.  
  1260.  
  1261. ;    move.w    #%0111111111111111,intena+$dff000
  1262. ;    move.w    #%1000000011111111,intena+$dff000
  1263.  
  1264.  
  1265.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1266.  
  1267.  
  1268.  clr.b PLR1_Ducked
  1269.  clr.b PLR2_Ducked
  1270.  clr.b p1_ducked
  1271.  clr.b p2_ducked
  1272.  
  1273. ********************************************
  1274.  
  1275. ;    jmp docredits
  1276.  
  1277. ********************************************
  1278.  
  1279.  
  1280.  st doanything
  1281.  
  1282. lop:
  1283.  
  1284.  btst #6,$bfe001
  1285.  bne.b .nocop
  1286.  
  1287.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1288.  
  1289. .nocop
  1290.  
  1291.  cmp.b #'n',mors
  1292.  bne .nopause
  1293.  
  1294.  move.l #KeyMap,a5
  1295.  tst.b $19(a5)
  1296.  beq.s .nopause
  1297.  clr.b doanything
  1298.  
  1299. .waitrel:
  1300.  
  1301.  tst.b PLR1JOY
  1302.  beq.s .NOJOY
  1303.  jsr _ReadJoy1
  1304. .NOJOY
  1305.  
  1306.  tst.b $19(a5)
  1307.  bne.s .waitrel
  1308.  
  1309.  bsr PAUSEOPTS
  1310.  
  1311.  
  1312.  st doanything
  1313. .nopause: 
  1314.  
  1315.  st READCONTROLS
  1316.  move.l #$dff000,a6
  1317.  
  1318.  move.w hitcol,d0
  1319.  beq.s nofadedownhc
  1320.  sub.w #$100,d0
  1321.  move.w d0,hitcol
  1322.  move.w d0,hitcol2
  1323. nofadedownhc:
  1324.  
  1325.  cmp.b #'n',mors
  1326.  beq .nopause
  1327.  
  1328.  move.b SLAVEPAUSE,d0
  1329.  or.b MASTERPAUSE,d0
  1330.  beq.s .nopause
  1331.  clr.b doanything
  1332.  
  1333.  move.l #KeyMap,a5
  1334. .waitrel:
  1335.  
  1336.  
  1337.  cmp.b #'s',mors
  1338.  beq.s .RE2
  1339.  tst.b PLR1JOY
  1340.  beq.s .NOJOY
  1341.  jsr _ReadJoy1
  1342.  bra .RE1
  1343. .RE2:
  1344.  tst.b PLR2JOY
  1345.  beq.s .NOJOY
  1346.  jsr _ReadJoy2
  1347. .RE1
  1348. .NOJOY:
  1349.  tst.b $19(a5)
  1350.  bne.s .waitrel
  1351.  
  1352.  bsr PAUSEOPTS
  1353.  
  1354.  cmp.b #'m',mors
  1355.  bne.s .slavelast
  1356.  Jsr SENDFIRST
  1357.  bra .masfirst
  1358. .slavelast
  1359.  Jsr RECFIRST
  1360. .masfirst:
  1361.  clr.b SLAVEPAUSE
  1362.  clr.b MASTERPAUSE
  1363.  st doanything
  1364.  
  1365. .nopause: 
  1366.  
  1367.  
  1368.  
  1369.  move.l drawpt,d0
  1370.  move.l olddrawpt,drawpt
  1371.  move.l d0,olddrawpt
  1372.  move.l d0,$dff084    
  1373.  move.l drawpt,a3
  1374. ; move.l COPSCRNBUFF,a3
  1375.  adda.w #10,a3
  1376.  move.l a3,frompt
  1377.  add.l #104*4*40,a3
  1378.  move.l a3,midpt
  1379.  
  1380.  cmp.b #'s',mors
  1381.  beq.s nowaitslave
  1382.  
  1383. waitfortop:
  1384.  
  1385.  btst.b #0,intreqrl(a6)
  1386.  beq.b waitfortop
  1387.  
  1388.  move.w #$1,intreq(a6)
  1389.  move.l #PLR1_GunData,GunData
  1390.  move.b PLR1_GunSelected,GunSelected
  1391.  bra waitmaster
  1392.  
  1393. nowaitslave:
  1394.  move.l #PLR2_GunData,GunData
  1395.  move.b PLR2_GunSelected,GunSelected
  1396. waitmaster:
  1397.  
  1398.  
  1399.  move.l waterpt,a0
  1400.  move.l (a0)+,watertouse
  1401.  cmp.l #endwaterlist,a0
  1402.  blt.s okwat
  1403.  move.l #waterlist,a0
  1404. okwat:
  1405.  move.l a0,waterpt
  1406.  
  1407.  add.w #640,wtan
  1408.  and.w #8191,wtan
  1409.  add.w #1,wateroff
  1410.  and.w #63,wateroff
  1411.  
  1412.  move.l GunData,a6
  1413.  moveq #0,d0
  1414.  move.b GunSelected,d0
  1415.  lsl.w #2,d0
  1416.  lea (a6,d0.w*8),a6
  1417.  move.w (a6),d0
  1418.  asr.w #3,d0
  1419.  move.w d0,Ammo
  1420.  
  1421.  move.l PLR1_xoff,OLDX1
  1422.  move.l PLR1_zoff,OLDZ1
  1423.  move.l PLR2_xoff,OLDX2
  1424.  move.l PLR2_zoff,OLDZ2
  1425.  
  1426.  
  1427.  
  1428.  move.l #$dff000,a6
  1429.  
  1430.  cmp.b #'s',mors
  1431.  beq ASlaveShouldWaitOnHisMaster
  1432.  
  1433.  cmp.b #'n',mors
  1434.  bne NotOnePlayer
  1435.  
  1436.  move.w PLR1_energy,Energy
  1437.  move.w FramesToDraw,TempFrames
  1438.  cmp.w #15,TempFrames
  1439.  blt.s .okframe
  1440.  move.w #15,TempFrames
  1441. .okframe:
  1442.  move.w #0,FramesToDraw
  1443.  
  1444. *********************************************
  1445. *********** TAKE THIS OUT *******************
  1446. *********************************************
  1447.  
  1448.  move.l CHEATPTR,a4
  1449.  add.l #200000,a4
  1450.  moveq #0,d0
  1451.  move.b (a4),d0
  1452.  
  1453.  move.l #KeyMap,a5
  1454.  tst.b (a5,d0.w)
  1455.  beq.s .nocheat
  1456.  
  1457.  addq #1,a4
  1458.  cmp.l #ENDCHEAT,a4
  1459.  blt.s .nocheat
  1460.  cmp.w #0,CHEATNUM
  1461.  beq.s .nocheat
  1462.  sub.w #1,CHEATNUM
  1463.  move.l #CHEATFRAME,a4
  1464.  move.w #127,PLR1_energy
  1465.  bsr EnergyBar
  1466. .nocheat
  1467.  
  1468.  sub.l #200000,a4
  1469.  move.l a4,CHEATPTR
  1470.  
  1471. **********************************************
  1472. **********************************************
  1473. **********************************************
  1474.  
  1475.  move.l PLR1s_xoff,p1_xoff
  1476.  move.l PLR1s_zoff,p1_zoff
  1477.  move.l PLR1s_yoff,p1_yoff
  1478.  move.l PLR1s_height,p1_height
  1479.  move.w PLR1s_angpos,p1_angpos
  1480.  move.w PLR1_bobble,p1_bobble
  1481.  move.b PLR1_clicked,p1_clicked
  1482.  move.b PLR1_fire,p1_fire
  1483.  clr.b PLR1_clicked
  1484.  move.b PLR1_SPCTAP,p1_spctap
  1485.  clr.b PLR1_SPCTAP
  1486.  move.b PLR1_Ducked,p1_ducked
  1487.  move.b PLR1_GunSelected,p1_gunselected
  1488.  
  1489.  bsr PLR1_Control
  1490.  
  1491.  move.l PLR1_Roompt,a0
  1492.  move.l ToZoneRoof(a0),SplitHeight
  1493.  move.w p1_xoff,THISPLRxoff
  1494.  move.w p1_zoff,THISPLRzoff
  1495.  
  1496.  
  1497.  move.l #$60000,p2_yoff
  1498.  move.l PLR2_Obj,a0
  1499.  move.w #-1,GraphicRoom(a0)
  1500.  move.w #-1,12(a0)
  1501.  move.b #0,17(a0)
  1502.  move.l #BollocksRoom,PLR2_Roompt
  1503.  
  1504.  bra donetalking
  1505.  
  1506. NotOnePlayer:
  1507.  move.l #KeyMap,a5
  1508.  tst.b $19(a5)
  1509.  sne MASTERPAUSE
  1510.  
  1511. *********************************
  1512.  move.w PLR1_energy,Energy
  1513. ; change this back
  1514. *********************************
  1515.  
  1516.  jsr SENDFIRST
  1517.  
  1518.  move.w FramesToDraw,TempFrames
  1519.  cmp.w #15,TempFrames
  1520.  blt.s .okframe
  1521.  move.w #15,TempFrames
  1522. .okframe:
  1523.  move.w #0,FramesToDraw
  1524.  
  1525.  move.l PLR1s_xoff,p1_xoff
  1526.  move.l PLR1s_zoff,p1_zoff
  1527.  move.l PLR1s_yoff,p1_yoff
  1528.  move.l PLR1s_height,p1_height
  1529.  move.w PLR1s_angpos,p1_angpos
  1530.  move.w PLR1_bobble,p1_bobble
  1531.  move.b PLR1_clicked,p1_clicked
  1532.  clr.b PLR1_clicked
  1533.  move.b PLR1_fire,p1_fire
  1534.  move.b PLR1_SPCTAP,p1_spctap
  1535.  clr.b PLR1_SPCTAP
  1536.  move.b PLR1_Ducked,p1_ducked
  1537.  move.b PLR1_GunSelected,p1_gunselected
  1538.  
  1539.  move.l p1_xoff,d0
  1540.  jsr SENDFIRST
  1541.  move.l d0,p2_xoff
  1542.  
  1543.  move.l p1_zoff,d0
  1544.  jsr SENDFIRST
  1545.  move.l d0,p2_zoff 
  1546.  
  1547.  move.l p1_yoff,d0
  1548.  jsr SENDFIRST
  1549.  move.l d0,p2_yoff
  1550.   
  1551.  move.l p1_height,d0
  1552.  jsr SENDFIRST
  1553.  move.l d0,p2_height
  1554.  
  1555.  move.w p1_angpos,d0
  1556.  swap d0
  1557.  move.w p1_bobble,d0
  1558.  jsr SENDFIRST
  1559.  move.w d0,p2_bobble
  1560.  swap d0
  1561.  move.w d0,p2_angpos
  1562.  
  1563.  
  1564.  move.w TempFrames,d0
  1565.  swap d0
  1566.  move.b p1_spctap,d0
  1567.  lsl.w #8,d0
  1568.  move.b p1_clicked,d0
  1569.  jsr SENDFIRST
  1570.  move.b d0,p2_clicked
  1571.  lsr.w #8,d0
  1572.  move.b d0,p2_spctap
  1573.  
  1574.  
  1575.  move.w Rand1,d0
  1576.  swap d0
  1577.  move.b p1_ducked,d0
  1578.  lsl.w #8,d0
  1579.  move.b p1_gunselected,d0
  1580.  jsr SENDFIRST
  1581.  move.b d0,p2_gunselected
  1582.  lsr.w #8,d0
  1583.  move.b d0,p2_ducked
  1584.  
  1585.  move.b p1_fire,d0
  1586.  lsl.w #8,d0
  1587.  move.b MASTERQUITTING,d0
  1588.  or.b d0,SLAVEQUITTING
  1589.  swap d0
  1590.  move.b MASTERPAUSE,d0
  1591.  or.b d0,SLAVEPAUSE
  1592.  jsr SENDFIRST
  1593.  or.b d0,MASTERPAUSE
  1594.  or.b d0,SLAVEPAUSE
  1595.  swap d0
  1596.  or.b d0,SLAVEQUITTING
  1597.  or.b d0,MASTERQUITTING
  1598.  lsr.w #8,d0
  1599.  move.b d0,p2_fire
  1600.  
  1601.  bsr PLR1_Control
  1602.  bsr PLR2_Control
  1603.  move.l PLR1_Roompt,a0
  1604.  move.l ToZoneRoof(a0),SplitHeight
  1605.  move.w p1_xoff,THISPLRxoff
  1606.  move.w p1_zoff,THISPLRzoff
  1607.  
  1608.  bra donetalking
  1609.  
  1610. ASlaveShouldWaitOnHisMaster:
  1611.  
  1612.  move.l #KeyMap,a5
  1613.  tst.b $19(a5)
  1614.  sne SLAVEPAUSE
  1615.  
  1616.  
  1617.  move.w PLR2_energy,Energy
  1618.  
  1619.  jsr RECFIRST
  1620.  
  1621.  move.l PLR2s_xoff,p2_xoff
  1622.  move.l PLR2s_zoff,p2_zoff
  1623.  move.l PLR2s_yoff,p2_yoff
  1624.  move.l PLR2s_height,p2_height
  1625.  move.w PLR2s_angpos,p2_angpos
  1626.  move.w PLR2_bobble,p2_bobble
  1627.  move.b PLR2_clicked,p2_clicked
  1628.  clr.b PLR2_clicked
  1629.  move.b PLR2_fire,p2_fire
  1630.  move.b PLR2_SPCTAP,p2_spctap
  1631.  clr.b PLR2_SPCTAP
  1632.  move.b PLR2_Ducked,p2_ducked
  1633.  move.b PLR2_GunSelected,p2_gunselected
  1634.  
  1635.  move.l p2_xoff,d0
  1636.  jsr RECFIRST
  1637.  move.l d0,p1_xoff
  1638.  
  1639.  move.l p2_zoff,d0
  1640.  jsr RECFIRST
  1641.  move.l d0,p1_zoff
  1642.  
  1643.  move.l p2_yoff,d0
  1644.  jsr RECFIRST
  1645.  move.l d0,p1_yoff
  1646.  
  1647.  move.l p2_height,d0
  1648.  jsr RECFIRST
  1649.  move.l d0,p1_height
  1650.  
  1651.  move.w p2_angpos,d0
  1652.  swap d0
  1653.  move.w p2_bobble,d0
  1654.  jsr RECFIRST
  1655.  move.w d0,p1_bobble
  1656.  swap d0
  1657.  move.w d0,p1_angpos
  1658.  
  1659.  
  1660.  move.b p2_spctap,d0
  1661.  lsl.w #8,d0
  1662.  move.b p2_clicked,d0
  1663.  jsr RECFIRST
  1664.  move.b d0,p1_clicked
  1665.  lsr.w #8,d0
  1666.  move.b d0,p1_spctap
  1667.  swap d0
  1668.  move.w d0,TempFrames
  1669.  
  1670.  
  1671.  move.b p2_ducked,d0
  1672.  lsl.w #8,d0
  1673.  move.b p2_gunselected,d0
  1674.  jsr RECFIRST
  1675.  move.b d0,p1_gunselected
  1676.  lsr.w #8,d0
  1677.  move.b d0,p1_ducked
  1678.  swap d0
  1679.  move.w d0,Rand1
  1680.  
  1681.  move.b p2_fire,d0
  1682.  lsl.w #8,d0
  1683.  move.b SLAVEQUITTING,d0
  1684.  or.b d0,MASTERQUITTING
  1685.  swap d0
  1686.  move.b SLAVEPAUSE,d0
  1687.  or.b d0,MASTERPAUSE
  1688.  jsr RECFIRST
  1689.  or.b d0,MASTERPAUSE
  1690.  or.b d0,SLAVEPAUSE
  1691.  swap d0
  1692.  or.b d0,SLAVEQUITTING
  1693.  or.b d0,MASTERQUITTING
  1694.  lsr.w #8,d0
  1695.  move.b d0,p1_fire
  1696.  
  1697.  
  1698.  bsr PLR1_Control
  1699.  bsr PLR2_Control
  1700.  move.w p2_xoff,THISPLRxoff
  1701.  move.w p2_zoff,THISPLRzoff
  1702.  move.l PLR2_Roompt,a0
  1703.  move.l ToZoneRoof(a0),SplitHeight
  1704.  
  1705. donetalking:
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  move.l #ZoneBrightTable,a1
  1711.  move.l ZoneAdds,a2
  1712.  move.l PLR2_ListOfGraphRooms,a0
  1713.  move.l PLR2_PointsToRotatePtr,a5
  1714.  cmp.b #'s',mors
  1715.  beq.s doallz
  1716.  move.l PLR1_ListOfGraphRooms,a0
  1717.  move.l PLR1_PointsToRotatePtr,a5
  1718.  
  1719. doallz
  1720.  move.w (a0),d0
  1721.  blt.s doneallz
  1722.  add.w #8,a0
  1723.  
  1724.  move.l (a2,d0.w*4),a3
  1725.  add.l LEVELDATA,a3
  1726.  move.w ToZoneBrightness(a3),d2
  1727.  
  1728.  blt.s justbright
  1729.  move.w d2,d3
  1730.  lsr.w #8,d3
  1731.  tst.b d3
  1732.  beq.s justbright
  1733.  
  1734.  move.l #BrightAnimTable,a4
  1735.  move.w -2(a4,d3.w*2),d2
  1736.  
  1737. justbright:
  1738.  move.w d2,(a1,d0.w*4)
  1739.  
  1740.  move.w ToUpperBrightness(a3),d2
  1741.  
  1742.  blt.s justbright2
  1743.  move.w d2,d3
  1744.  lsr.w #8,d3
  1745.  tst.b d3
  1746.  beq.s justbright2
  1747.  
  1748.  move.l #BrightAnimTable,a4
  1749.  move.w -2(a4,d3.w*2),d2
  1750.  
  1751. justbright2:
  1752.  move.w d2,2(a1,d0.w*4)
  1753.  
  1754.  bra doallz
  1755.  
  1756. doneallz:
  1757.  
  1758.  move.l PointBrights,a2
  1759.  move.l #CurrentPointBrights,a3
  1760. justtheone:
  1761.  move.w (a5)+,d0
  1762.  blt.s whythehell
  1763.  move.w (a2,d0.w*4),d2
  1764.  
  1765.  tst.b d2
  1766.  blt.s .justbright
  1767.  move.w d2,d3
  1768.  lsr.w #8,d3
  1769.  tst.b d3
  1770.  beq.s .justbright
  1771.  
  1772.  move.w d3,d4
  1773.  and.w #$f,d3
  1774.  lsr.w #4,d4
  1775.  add.w #1,d4
  1776.  
  1777.  move.l #BrightAnimTable,a0
  1778.  move.w -2(a0,d3.w*2),d3
  1779.  ext.w d2
  1780.  sub.w d2,d3
  1781.  muls d4,d3
  1782.  asr.w #4,d3
  1783.  add.w d3,d2
  1784.  
  1785. .justbright:
  1786.  ext.w d2
  1787.  
  1788.  move.w d2,(a3,d0.w*4)
  1789.  move.w 2(a2,d0.w*4),d2
  1790.  
  1791.  tst.b d2
  1792.  blt.s .justbright2
  1793.  move.w d2,d3
  1794.  lsr.w #8,d3
  1795.  tst.b d3
  1796.  beq.s .justbright2
  1797.  
  1798.  move.w d3,d4
  1799.  and.w #$f,d3
  1800.  lsr.w #4,d4
  1801.  add.w #1,d4
  1802.  
  1803.  move.l #BrightAnimTable,a0
  1804.  move.w -2(a0,d3.w*2),d3
  1805.  ext.w d2
  1806.  sub.w d2,d3
  1807.  muls d4,d3
  1808.  asr.w #4,d3
  1809.  add.w d3,d2
  1810.  
  1811. .justbright2:
  1812.  ext.w d2
  1813.  
  1814.  move.w d2,2(a3,d0.w*4)
  1815.  
  1816.  bra.s justtheone
  1817.  
  1818. whythehell:
  1819.  
  1820.  cmp.b #'n',mors
  1821.  beq nosee
  1822.  
  1823.  move.l PLR1_Roompt,FromRoom
  1824.  move.l PLR2_Roompt,ToRoom
  1825.  move.w p1_xoff,Viewerx
  1826.  move.w p1_zoff,Viewerz
  1827.  move.l p1_yoff,d0
  1828.  asr.l #7,d0
  1829.  move.w d0,Viewery
  1830.  move.w p2_xoff,Targetx
  1831.  move.w p2_zoff,Targetz
  1832.  move.l p2_yoff,d0
  1833.  asr.l #7,d0
  1834.  move.w d0,Targety
  1835.  move.b PLR1_StoodInTop,ViewerTop
  1836.  move.b PLR2_StoodInTop,TargetTop
  1837.  jsr CanItBeSeen
  1838.  
  1839.  move.l PLR1_Obj,a0
  1840.  move.b CanSee,d0
  1841.  and.b #2,d0
  1842.  move.b d0,17(a0)
  1843.  move.l PLR2_Obj,a0
  1844.  move.b CanSee,d0
  1845.  and.b #1,d0
  1846.  move.b d0,17(a0)
  1847.  
  1848. nosee:
  1849.  
  1850.  move.l PLR1_Obj,a0
  1851.  move.b #5,16(a0)
  1852.  move.l PLR2_Obj,a0
  1853.  move.b #11,16(a0)
  1854.  
  1855.  move.w TempFrames,d0
  1856.  add.w d0,p1_holddown
  1857.  cmp.w #30,p1_holddown
  1858.  blt.s oklength
  1859.  move.w #30,p1_holddown
  1860. oklength:
  1861.  
  1862.  tst.b p1_fire
  1863.  bne.s okstillheld
  1864.  sub.w d0,p1_holddown
  1865.  bge.s okstillheld
  1866.  move.w #0,p1_holddown
  1867.  
  1868. okstillheld:
  1869.  
  1870.  move.w TempFrames,d0
  1871.  add.w d0,p2_holddown
  1872.  
  1873.  cmp.w #30,p2_holddown
  1874.  blt.s oklength2
  1875.  move.w #30,p2_holddown
  1876. oklength2:
  1877.  
  1878.  
  1879.  tst.b p2_fire
  1880.  bne.s okstillheld2
  1881.  sub.w d0,p2_holddown
  1882.  bge.s okstillheld2
  1883.  move.w #0,p2_holddown
  1884. okstillheld2:
  1885.  
  1886. ; move.l #PLR1_GunData,a1
  1887. ; move.w p1_holddown,d0
  1888. ; move.w #50,10+32*3(a1)
  1889. ; move.l #PLR2_GunData,a1
  1890. ; move.w p2_holddown,d0
  1891. ; move.w #50,10+32*3(a1)
  1892.  
  1893.  
  1894. ******************************************
  1895. ******************************************
  1896.  
  1897.  move.w TempFrames,d1
  1898.  bgt.s noze
  1899.  moveq #1,d1
  1900. noze:
  1901.  
  1902.  move.w PLR1_xoff,d0
  1903.  sub.w OLDX1,d0
  1904.  asl.w #4,d0
  1905.  ext.l d0
  1906.  divs d1,d0
  1907.  move.w d0,XDIFF1
  1908.  move.w PLR2_xoff,d0
  1909.  sub.w OLDX2,d0
  1910.  asl.w #4,d0
  1911.  ext.l d0
  1912.  divs d1,d0
  1913.  move.w d0,XDIFF2
  1914.  move.w PLR1_zoff,d0
  1915.  sub.w OLDZ1,d0
  1916.  asl.w #4,d0
  1917.  ext.l d0
  1918.  divs d1,d0
  1919.  move.w d0,ZDIFF1
  1920.  move.w PLR2_zoff,d0
  1921.  sub.w OLDZ2,d0
  1922.  asl.w #4,d0
  1923.  ext.l d0
  1924.  divs d1,d0
  1925.  move.w d0,ZDIFF2
  1926.  
  1927.  cmp.b #'s',mors
  1928.  beq.s ImPlayer2OhYesIAm
  1929.  bsr USEPLR1
  1930.  bra IWasPlayer1
  1931.  
  1932. ImPlayer2OhYesIAm:
  1933.  bsr USEPLR2
  1934. IWasPlayer1:
  1935.  
  1936.  
  1937.  cmp.b #'s',mors
  1938.  beq drawplayer2
  1939.  
  1940.  move.w #0,scaleval
  1941.  
  1942.  move.l PLR1_xoff,xoff
  1943.  move.l PLR1_yoff,yoff
  1944.  move.l PLR1_zoff,zoff
  1945.  move.w PLR1_angpos,angpos
  1946.  move.w PLR1_cosval,cosval
  1947.  move.w PLR1_sinval,sinval
  1948.  
  1949.  
  1950.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1951.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1952.  move.l PLR1_Roompt,Roompt
  1953.  
  1954.  bsr OrderZones
  1955.  jsr objmoveanim
  1956.  bsr EnergyBar
  1957.  bsr AmmoBar
  1958.  
  1959.  move.w #0,leftclip
  1960.  move.w #96,rightclip
  1961.  move.w #0,deftopclip
  1962.  
  1963.  move.w #79,defbotclip
  1964.  move.w #0,topclip
  1965.  move.w #79,botclip
  1966. ; sub.l #10*104*4,frompt
  1967. ; sub.l #10*104*4,midpt
  1968.  
  1969. * Subroom loop
  1970.  
  1971.  
  1972.  bsr DrawDisplay 
  1973.  
  1974.  bra nodrawp2
  1975.  
  1976. drawplayer2
  1977.  
  1978.  move.w #0,scaleval
  1979.  move.l PLR2_xoff,xoff
  1980.  move.l PLR2_yoff,yoff
  1981.  move.l PLR2_zoff,zoff
  1982.  move.w PLR2_angpos,angpos
  1983.  move.w PLR2_cosval,cosval
  1984.  move.w PLR2_sinval,sinval 
  1985.  
  1986.  
  1987.  
  1988.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1989.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1990.  move.l PLR2_Roompt,Roompt
  1991.  
  1992.  bsr OrderZones
  1993.  jsr objmoveanim
  1994.  bsr EnergyBar
  1995.  bsr AmmoBar
  1996.  
  1997.  move.w #0,leftclip
  1998.  move.w #96,rightclip
  1999.  move.w #0,deftopclip
  2000.  move.w #79,defbotclip
  2001.  move.w #0,topclip
  2002.  move.w #79,botclip
  2003.  
  2004.  bsr DrawDisplay
  2005.  
  2006. nodrawp2:
  2007.  
  2008. ***************************************** 
  2009. * Copy from copbuff to chip ram
  2010.  
  2011.  
  2012. ; move.l drawpt,a3
  2013. ; adda.w #10,a3
  2014. ; move.l COPSCRNBUFF,a2
  2015. ; move.w #2,d6
  2016. ; adda.w #10,a2
  2017. ;COPYOUT
  2018. ; move.w #31,d0
  2019. ;COPYDOWN1:
  2020. ; move.w #3,d1
  2021. ; move.l a2,a4
  2022. ; move.l a3,a5
  2023. ;.inlop1:
  2024. ;val SET 0
  2025. ; REPT 20
  2026. ; move.w val(a4),val(a5)
  2027. ;val SET val+104*4
  2028. ; ENDR
  2029. ; adda.l #104*4*20,a4
  2030. ; adda.l #104*4*20,a5
  2031. ; dbra d1,.inlop1
  2032. ; addq #4,a2
  2033. ; addq #4,a3
  2034. ; dbra d0,COPYDOWN1
  2035. ; addq #4,a2
  2036. ; addq #4,a3
  2037. ; dbra d6,COPYOUT 
  2038.  
  2039.  
  2040. ***************************************** 
  2041.  move.l PLR2_Roompt,a0
  2042.  move.l #WorkSpace,a1
  2043.  clr.l (a1)
  2044.  clr.l 4(a1)
  2045.  clr.l 8(a1)
  2046.  clr.l 12(a1)
  2047.  clr.l 16(a1)
  2048.  clr.l 20(a1)
  2049.  clr.l 24(a1)
  2050.  clr.l 28(a1)
  2051.  
  2052.  cmp.b #'n',mors
  2053.  beq.s plr1only
  2054.  
  2055.  lea ToListOfGraph(a0),a0
  2056. .doallrooms:
  2057.  move.w (a0),d0
  2058.  blt.s .allroomsdone
  2059.  addq #8,a0
  2060.  move.w d0,d1
  2061.  asr.w #3,d0
  2062.  bset d1,(a1,d0.w)
  2063.  bra .doallrooms
  2064. .allroomsdone:
  2065.  
  2066. plr1only:
  2067.  
  2068.  move.l PLR1_Roompt,a0
  2069.  lea ToListOfGraph(a0),a0
  2070. .doallrooms2:
  2071.  move.w (a0),d0
  2072.  blt.s .allroomsdone2
  2073.  addq #8,a0
  2074.  move.w d0,d1
  2075.  asr.w #3,d0
  2076.  bset d1,(a1,d0.w)
  2077.  bra .doallrooms2
  2078. .allroomsdone2:
  2079.  
  2080.  move.l ObjectData,a0
  2081.  sub.w #64,a0
  2082. .doallobs:
  2083.  add.w #64,a0
  2084.  move.w (a0),d0
  2085.  blt.s .allobsdone
  2086.  move.w 12(a0),d0
  2087.  blt.s .doallobs
  2088.  move.w d0,d1
  2089.  asr.w #3,d0
  2090.  btst d1,(a1,d0.w)
  2091.  beq.s .doallobs
  2092.  or.b #127,worry(a0)
  2093.  bra.s .doallobs
  2094. .allobsdone:
  2095.  
  2096.  
  2097.  
  2098. ; move.l #brightentab,a0
  2099. ; move.l frompt,a3
  2100. ; adda.w #(4*33)+(104*4*20),a3
  2101. ; move.w #20,d7
  2102. ; move.w #20,d6
  2103. ;horl:
  2104. ; move.w d6,d5
  2105. ; move.l a3,a1
  2106. ;vertl
  2107. ; move.w (a1),d0
  2108. ; move.w (a0,d0.w*2),(a1)
  2109. ; addq #4,a1
  2110. ; dbra d5,vertl
  2111. ; adda.w #104*4,a3
  2112. ; dbra d7,horl
  2113.  
  2114.  move.l #$dff000,a6
  2115.  
  2116. ; move.w #$300,col0(a6)
  2117.  
  2118.  move.l #KeyMap,a5
  2119.  tst.b $45(a5)
  2120.  beq.s noend
  2121.  
  2122.  cmp.b #'s',mors
  2123.  beq plr2quit 
  2124.  
  2125.  st MASTERQUITTING
  2126.  bra noend
  2127.  
  2128. plr2quit:
  2129.  st SLAVEQUITTING
  2130. noend:
  2131.  
  2132.  tst.b MASTERQUITTING
  2133.  beq.s .noquit
  2134.  tst.b SLAVEQUITTING
  2135.  bne endnomusic
  2136. .noquit
  2137.  
  2138.  cmp.b #'n',mors
  2139.  bne.s noexit
  2140.  move.l PLR1_Roompt,a0
  2141.  move.w (a0),d0
  2142.  move.w PLOPT,d1
  2143.  move.l #ENDZONES,a0
  2144.  cmp.w (a0,d1.w*2),d0
  2145.  
  2146. ; change this for quick exit, charlie
  2147.  
  2148. zzzz:
  2149. ; bra end
  2150.  
  2151.  beq end
  2152. noexit:
  2153.  
  2154.  tst.w PLR1_energy
  2155.  ble end
  2156.  tst.w PLR2_energy
  2157.  ble end
  2158.  
  2159. ; move.l SwitchData,a0
  2160. ; tst.b 24+8(a0)
  2161. ; bne end
  2162.   
  2163.  JSR STOPTIMER
  2164.  
  2165.  bra lop
  2166.  
  2167. MASTERQUITTING: dc.b 0
  2168. SLAVEQUITTING: dc.b 0
  2169. MASTERPAUSE: dc.b 0
  2170. SLAVEPAUSE: dc.b 0
  2171.  
  2172. PAUSEOPTS:
  2173.  include "ab3:source/pauseopts"
  2174.  
  2175. ENDZONES:
  2176. ; LEVEL 1
  2177.  dc.w 132
  2178. ; LEVEL 2
  2179.  dc.w 149
  2180. ; LEVEL 3
  2181.  dc.w 155
  2182. ; LEVEL 4
  2183.  dc.w 107
  2184. ; LEVEL 5
  2185.  dc.w 67
  2186. ; LEVEL 6
  2187.  dc.w 132
  2188. ; LEVEL 7
  2189.  dc.w 203
  2190. ; LEVEL 8
  2191.  dc.w 166
  2192. ; LEVEL 9
  2193.  dc.w 118
  2194. ; LEVEL 10
  2195.  dc.w 102
  2196. ; LEVEL 11
  2197.  dc.w 103
  2198. ; LEVEL 12
  2199.  dc.w 2
  2200. ; LEVEL 13
  2201.  dc.w 98
  2202. ; LEVEL 14
  2203.  dc.w 0
  2204. ; LEVEL 15
  2205.  dc.w 148
  2206. ; LEVEL 16
  2207.  dc.w 103
  2208.  
  2209. ***************************************************************************
  2210. ***************************************************************************
  2211. ****************** End of Main Loop here ********************************** 
  2212. ***************************************************************************
  2213. ***************************************************************************
  2214.  
  2215. putinsmallscr:
  2216.  move.l #$1fe0000,statskip
  2217.  move.l #$1fe0000,statskip+4
  2218.  
  2219.  move.l #healthpal,a5
  2220.  move.l COPSCRN1,a0
  2221.  move.l COPSCRN2,a2
  2222.  move.w #scrheight-1,d0
  2223.  move.l #0,d6
  2224.  move.w #0,d3
  2225.  move.w #$2bdf,startwait
  2226.  move.w #$2d01,endwait
  2227. .fillcop
  2228.  move.w #$180,d1
  2229.  
  2230.  move.l a0,a1
  2231.  move.l a2,a3
  2232.  move.w #$10c,(a1)+
  2233.  move.w #$10c,(a3)+
  2234.  move.w d3,(a1)+
  2235.  move.w d3,(a3)+
  2236.  eor.w #$8000,d3
  2237.  
  2238.  move.w #$106,(a1)+
  2239.  move.w #$106,(a3)+
  2240.  move.w #$2c42,d5
  2241.  or.w d3,d5
  2242.  and.w #$fffe,d5
  2243.  move.w d5,(a1)+
  2244.  move.w d5,(a3)+
  2245.  bsr do32
  2246.  
  2247.  move.w #$106,(a1)+
  2248.  move.w #$106,(a3)+
  2249.  move.w #$4c42,d5
  2250.  or.w d3,d5
  2251.  and.w #$fffe,d5
  2252.  move.w d5,(a1)+
  2253.  move.w d5,(a3)+
  2254.  bsr do32
  2255.  
  2256.  move.w #$106,(a1)+
  2257.  move.w #$106,(a3)+
  2258.  move.w #$6c42,d5
  2259.  or.w d3,d5
  2260.  and.w #$fffe,d5
  2261.  move.w d5,(a1)+
  2262.  move.w d5,(a3)+
  2263.  bsr do32
  2264.  
  2265.  
  2266.  move.l #$1060c42,(a1)+
  2267.  move.l #$1060c42,(a3)+
  2268.  move.w #$19e,(a1)+
  2269.  move.w (a5),(a1)+
  2270.  move.w #$19e,(a3)+
  2271.  move.w (a5)+,(a3)+
  2272.  
  2273. **********************************
  2274.  
  2275.  adda.w #104*4,a0
  2276.  adda.w #104*4,a2
  2277.  dbra d0,.fillcop
  2278.  
  2279.  move.w #$48,fetchstart
  2280.  move.w #$88,fetchstop
  2281.  move.w #$2cb1,winstart
  2282.  move.w #$2c91,winstop
  2283.  move.w #-24,modulo
  2284.  move.w #-24,modulo+4
  2285.  
  2286.  move.l #nullspr,d0
  2287.  move.w d0,s4l
  2288.  move.w d0,s5l
  2289.  move.w d0,s6l
  2290.  move.w d0,s7l
  2291.  swap d0
  2292.  move.w d0,s4h
  2293.  move.w d0,s5h
  2294.  move.w d0,s6h
  2295.  move.w d0,s7h 
  2296.  
  2297.  move.l #borders,d0
  2298.  move.w d0,s0l
  2299.  swap d0
  2300.  move.w d0,s0h
  2301.  move.l #borders+2592,d0
  2302.  move.w d0,s1l
  2303.  swap d0
  2304.  move.w d0,s1h
  2305.  move.l #borders+2592*2,d0
  2306.  move.w d0,s2l
  2307.  swap d0
  2308.  move.w d0,s2h
  2309.  move.l #borders+2592*3,d0
  2310.  move.w d0,s3l
  2311.  swap d0
  2312.  move.w d0,s3h
  2313.  
  2314.  
  2315.  move.l #scrn+40,a0
  2316.  move.l #scrn+160,a1
  2317.  move.l #scrn+280,a2
  2318.  move.l #smallscrntab,a3
  2319.  move.w #191,d7    ; counter
  2320.  move.w #0,d1    ; xpos
  2321. .plotscrnloop:
  2322.  move.b (a3)+,d0
  2323.  move.w d1,d2
  2324.  asr.w #3,d2
  2325.  move.b d1,d3
  2326.  not.b d3
  2327.  bclr.b d3,-40(a0,d2.w)
  2328.  bclr.b d3,(a0,d2.w)
  2329.  bclr.b d3,40(a0,d2.w)
  2330.  bclr.b d3,-40(a1,d2.w)
  2331.  bclr.b d3,(a1,d2.w)
  2332.  bclr.b d3,40(a1,d2.w)
  2333.  bclr.b d3,-40(a2,d2.w)
  2334.  btst #0,d0
  2335.  beq.s .nobp1
  2336.  bset.b d3,-40(a0,d2.w)
  2337. .nobp1:
  2338.  btst #1,d0
  2339.  beq.s .nobp2
  2340.  bset.b d3,(a0,d2.w)
  2341. .nobp2:
  2342.  btst #2,d0
  2343.  beq.s .nobp3
  2344.  bset.b d3,40(a0,d2.w)
  2345. .nobp3:
  2346.  btst #3,d0
  2347.  beq.s .nobp4
  2348.  bset.b d3,-40(a1,d2.w)
  2349. .nobp4:
  2350.  btst #4,d0
  2351.  beq.s .nobp5
  2352.  bset.b d3,(a1,d2.w)
  2353. .nobp5:
  2354.  btst #5,d0
  2355.  beq.s .nobp6
  2356.  bset.b d3,40(a1,d2.w)
  2357. .nobp6:
  2358.  btst #6,d0
  2359.  beq.s .nobp7
  2360.  bset.b d3,-40(a2,d2.w)
  2361. .nobp7:
  2362.  
  2363.  addq #1,d1
  2364.  
  2365.  dbra d7,.plotscrnloop
  2366.  
  2367.  
  2368.  rts
  2369.  
  2370. putinlargescr:
  2371.  
  2372.  move.l #$1000000,statskip
  2373.  move.l #$fffffffe,statskip+4
  2374.  
  2375.  move.l #healthpal,a5
  2376.  move.l COPSCRN1,a0
  2377.  move.l COPSCRN2,a2
  2378.  move.w #scrheight-1,d0
  2379.  move.l #0,d6
  2380.  move.w #0,d3
  2381.  move.w #$29df,startwait
  2382.  move.w #$2b01,endwait
  2383. .fillcop
  2384.  move.w #$180,d1
  2385.  
  2386.  move.l a0,a1
  2387.  move.l a2,a3
  2388.  move.w #$10c,(a1)+
  2389.  move.w #$10c,(a3)+
  2390.  move.w d3,(a1)+
  2391.  move.w d3,(a3)+
  2392.  eor.w #$8000,d3
  2393.  
  2394.  move.w #$106,(a1)+
  2395.  move.w #$106,(a3)+
  2396.  move.w #$2c42,d5
  2397.  or.w d3,d5
  2398.  and.w #$fffe,d5
  2399.  move.w d5,(a1)+
  2400.  move.w d5,(a3)+
  2401.  bsr do32
  2402.  
  2403.  move.w #$106,(a1)+
  2404.  move.w #$106,(a3)+
  2405.  move.w #$4c42,d5
  2406.  or.w d3,d5
  2407.  and.w #$fffe,d5
  2408.  move.w d5,(a1)+
  2409.  move.w d5,(a3)+
  2410.  bsr do32
  2411.  
  2412.  move.w #$106,(a1)+
  2413.  move.w #$106,(a3)+
  2414.  move.w #$6c42,d5
  2415.  or.w d3,d5
  2416.  and.w #$fffe,d5
  2417.  move.w d5,(a1)+
  2418.  move.w d5,(a3)+
  2419.  bsr do32
  2420.  
  2421.  move.w startwait,(a1)+
  2422.  move.w #$fffe,(a1)+
  2423.  move.w endwait,(a1)+
  2424.  move.w #$ff00,(a1)+
  2425.  move.w startwait,(a3)+
  2426.  move.w #$fffe,(a3)+
  2427.  move.w endwait,(a3)+
  2428.  move.w #$ff00,(a3)+
  2429.  
  2430. ; move.l $1fe0000,(a1)+
  2431. ; move.l $1fe0000,(a3)+
  2432. ; move.l $1fe0000,(a1)+
  2433. ; move.l $1fe0000,(a3)+
  2434.  
  2435.  
  2436.  add.w #$300,startwait
  2437.  add.w #$300,endwait
  2438.  
  2439. ; move.l #$1060c42,(a1)+
  2440. ; move.l #$1060c42,(a3)+
  2441. ; move.w #$19e,(a1)+
  2442. ; move.w (a5),(a1)+
  2443. ; move.w #$19e,(a3)+
  2444. ; move.w (a5)+,(a3)+
  2445.  
  2446. **********************************
  2447.  
  2448.  adda.w #104*4,a0
  2449.  adda.w #104*4,a2
  2450.  dbra d0,.fillcop
  2451.  
  2452.  move.w #$38,fetchstart
  2453.  move.w #$b8,fetchstop
  2454.  move.w #$2c81,winstart
  2455.  move.w #$2cc1,winstop
  2456.  move.w #-40,modulo
  2457.  move.w #-40,modulo+4
  2458.  
  2459.  move.l #nullspr,d0
  2460.  move.w d0,s0l
  2461.  move.w d0,s1l
  2462.  move.w d0,s2l
  2463.  move.w d0,s3l
  2464.  move.w d0,s4l
  2465.  move.w d0,s5l
  2466.  move.w d0,s6l
  2467.  move.w d0,s7l
  2468.  swap d0
  2469.  move.w d0,s0h
  2470.  move.w d0,s1h
  2471.  move.w d0,s2h
  2472.  move.w d0,s3h
  2473.  move.w d0,s4h
  2474.  move.w d0,s5h
  2475.  move.w d0,s6h
  2476.  move.w d0,s7h 
  2477.  
  2478.  move.l #scrn+40,a0
  2479.  move.l #scrn+160,a1
  2480.  move.l #scrn+280,a2
  2481.  move.l #scrntab,a3
  2482.  move.w #319,d7    ; counter
  2483.  move.w #0,d1    ; xpos
  2484. .plotscrnloop:
  2485.  move.b (a3)+,d0
  2486.  move.w d1,d2
  2487.  asr.w #3,d2
  2488.  move.b d1,d3
  2489.  not.b d3
  2490.  bclr.b d3,-40(a0,d2.w)
  2491.  bclr.b d3,(a0,d2.w)
  2492.  bclr.b d3,40(a0,d2.w)
  2493.  bclr.b d3,-40(a1,d2.w)
  2494.  bclr.b d3,(a1,d2.w)
  2495.  bclr.b d3,40(a1,d2.w)
  2496.  bclr.b d3,-40(a2,d2.w)
  2497.  btst #0,d0
  2498.  beq.s .nobp1
  2499.  bset.b d3,-40(a0,d2.w)
  2500. .nobp1:
  2501.  btst #1,d0
  2502.  beq.s .nobp2
  2503.  bset.b d3,(a0,d2.w)
  2504. .nobp2:
  2505.  btst #2,d0
  2506.  beq.s .nobp3
  2507.  bset.b d3,40(a0,d2.w)
  2508. .nobp3:
  2509.  btst #3,d0
  2510.  beq.s .nobp4
  2511.  bset.b d3,-40(a1,d2.w)
  2512. .nobp4:
  2513.  btst #4,d0
  2514.  beq.s .nobp5
  2515.  bset.b d3,(a1,d2.w)
  2516. .nobp5:
  2517.  btst #5,d0
  2518.  beq.s .nobp6
  2519.  bset.b d3,40(a1,d2.w)
  2520. .nobp6:
  2521.  btst #6,d0
  2522.  beq.s .nobp7
  2523.  bset.b d3,-40(a2,d2.w)
  2524. .nobp7:
  2525.  
  2526.  addq #1,d1
  2527.  
  2528.  dbra d7,.plotscrnloop
  2529.  
  2530.  rts
  2531.  
  2532. CLEARKEYBOARD:
  2533.  move.l #KeyMap,a5
  2534.  moveq #0,d0
  2535.  move.w #15,d1
  2536. clrloo:
  2537.  move.l d0,(a5)+
  2538.  move.l d0,(a5)+
  2539.  move.l d0,(a5)+
  2540.  move.l d0,(a5)+
  2541.  dbra d1,clrloo
  2542.  rts
  2543.  
  2544. READCONTROLS: dc.w 0
  2545.  
  2546. tstststst: dc.w 0
  2547.  
  2548. BollocksRoom:
  2549.  dc.w -1
  2550.  ds.l 50
  2551.  
  2552. GUNYOFFS:
  2553.  dc.w 20
  2554.  dc.w 20
  2555.  dc.w 0
  2556.  dc.w 20
  2557.  dc.w 20
  2558.  dc.w 0
  2559.  dc.w 0
  2560.  dc.w 20
  2561.  
  2562. USEPLR1:
  2563.  
  2564. ***********************************
  2565.  
  2566.  move.l PLR1_Obj,a0 
  2567.  move.l ObjectPoints,a1
  2568.  move.l #ObjRotated,a2
  2569.  move.w (a0),d0
  2570.  move.l PLR1_xoff,(a1,d0.w*8)
  2571.  move.l PLR1_zoff,4(a1,d0.w*8)
  2572.  move.l PLR1_Roompt,a1
  2573.  
  2574.  moveq #0,d2
  2575.  move.b damagetaken(a0),d2
  2576.  beq .notbeenshot
  2577.  move.w #$f00,hitcol
  2578.  move.w #$f00,hitcol2
  2579.  sub.w d2,PLR1_energy
  2580.  movem.l d0-d7/a0-a6,-(a7)
  2581.  move.b #$fb,IDNUM
  2582.  move.w #19,Samplenum
  2583.  clr.b notifplaying
  2584.  move.w #0,Noisex
  2585.  move.w #0,Noisez
  2586.  move.w #100,Noisevol
  2587.  jsr MakeSomeNoise
  2588.  
  2589.  movem.l (a7)+,d0-d7/a0-a6
  2590.  
  2591. .notbeenshot
  2592.  move.b #0,damagetaken(a0)
  2593.  move.b PLR1_energy+1,numlives(a0)
  2594.  
  2595.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2596.  
  2597.  move.w (a1),12(a0)
  2598.  move.w (a1),d2
  2599.  move.l #ZoneBrightTable,a1
  2600.  move.l (a1,d2.w*4),d2
  2601.  tst.b PLR1_StoodInTop
  2602.  bne.s .okinbott
  2603.  swap d2
  2604. .okinbott:
  2605.  
  2606.  move.w d2,2(a0)
  2607.  
  2608.  move.l p1_yoff,d0
  2609.  move.l p1_height,d1
  2610.  asr.l #1,d1
  2611.  add.l d1,d0
  2612.  asr.l #7,d0
  2613.  move.w d0,4(a0)
  2614.  
  2615. ***********************************
  2616.  
  2617.  move.l PLR2_Obj,a0 
  2618.  
  2619.  move.w PLR2_angpos,d0
  2620.  and.w #8190,d0
  2621.  move.w d0,Facing(a0)
  2622.  
  2623.  jsr ViewpointToDraw
  2624.  asl.w #2,d0
  2625.  moveq #0,d1
  2626.  move.b p2_bobble,d1
  2627.  not.b d1
  2628.  lsr.b #3,d1
  2629.  and.b #$3,d1
  2630.  add.w d1,d0
  2631.  move.w d0,10(a0)
  2632.  move.w #10,8(a0)
  2633.  
  2634.  move.l ObjectPoints,a1
  2635.  move.l #ObjRotated,a2
  2636.  move.w (a0),d0
  2637.  move.l PLR2_xoff,(a1,d0.w*8)
  2638.  move.l PLR2_zoff,4(a1,d0.w*8)
  2639.  move.l PLR2_Roompt,a1
  2640.  
  2641.  moveq #0,d2
  2642.  move.b damagetaken(a0),d2
  2643.  beq .notbeenshot2
  2644.  sub.w d2,PLR2_energy
  2645. .notbeenshot2
  2646.  move.b #0,damagetaken(a0)
  2647.  move.b PLR2_energy+1,numlives(a0)
  2648.  
  2649.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2650.  
  2651.  move.w (a1),12(a0)
  2652.  move.w (a1),d2
  2653.  move.l #ZoneBrightTable,a1
  2654.  move.l (a1,d2.w*4),d2
  2655.  tst.b PLR2_StoodInTop
  2656.  bne.s .okinbott2
  2657.  swap d2
  2658. .okinbott2:
  2659.  
  2660.  move.w d2,2(a0)
  2661.  
  2662.  move.l p2_yoff,d0
  2663.  move.l p2_height,d1
  2664.  asr.l #1,d1
  2665.  add.l d1,d0
  2666.  asr.l #7,d0
  2667.  move.w d0,4(a0)
  2668.  
  2669. **********************************
  2670.  
  2671.  
  2672.  move.l PLR1_Obj,a0
  2673.  move.w #-1,12+128(a0)
  2674.  
  2675.  rts
  2676.  
  2677. DRAWINGUN:
  2678.  move.l #Objects+9*16,a0
  2679.  move.l 4(a0),a5    ; ptr
  2680.  move.l 8(a0),a2    ; frames
  2681.  move.l 12(a0),a4    ; pal
  2682.  move.l (a0),a0        ; wad
  2683.  
  2684.  move.l #GunAnims,a1
  2685.  move.l (a1,d0.w*8),a1
  2686.  move.w (a1,d1.w*2),d5    ; frame of anim
  2687.  
  2688.  move.l #GUNYOFFS,a1
  2689.  move.w (a1,d0.w*2),d7    ; yoff
  2690.  move.l frompt,a6
  2691.  move.w d7,d6
  2692.  muls #104*4,d6
  2693.  add.l d6,a6    ; screen pointer
  2694.  
  2695.  asl.w #2,d0
  2696.  add.w d5,d0    ; frame
  2697.  move.w (a2,d0.w*4),d1    ; xoff
  2698.  
  2699.  lea (a5,d1.w),a5    ; right ptr
  2700.  
  2701.  move.w #31,d0
  2702.  bsr DRAWCHUNK
  2703.  addq.w #4,a6
  2704.  move.w #31,d0
  2705.  bsr DRAWCHUNK
  2706.  addq.w #4,a6
  2707.  move.w #31,d0
  2708.  bsr DRAWCHUNK
  2709.  rts
  2710.  
  2711.  
  2712. DRAWCHUNK:
  2713.  move.w #78,d3
  2714.  sub.w d7,d3
  2715.  move.l a6,a3
  2716.  move.b (a5),d2
  2717.  move.l (a5)+,d1
  2718.  bne.s .noblank
  2719.  addq #4,a6
  2720.  dbra d0,DRAWCHUNK 
  2721.  rts
  2722.  
  2723. .noblank:
  2724.  and.l #$ffffff,d1
  2725.  lea (a0,d1.l),a1
  2726.  cmp.b #1,d2
  2727.  bgt.s thirdd
  2728.  beq.s secc
  2729. .drawdown:
  2730.  move.w (a1)+,d2
  2731.  and.w #%11111,d2
  2732.  beq.s .itsblank
  2733.  move.w (a4,d2.w*2),(a3)
  2734. .itsblank
  2735.  add.w #104*4,a3
  2736.  dbra d3,.drawdown
  2737.  
  2738.  addq #4,a6
  2739.  dbra d0,DRAWCHUNK
  2740.  rts
  2741.  
  2742. secc:
  2743. .drawdown:
  2744.  move.w (a1)+,d2
  2745.  lsr.w #5,d2
  2746.  and.w #%11111,d2
  2747.  beq.s .itsblank
  2748.  move.w (a4,d2.w*2),(a3)
  2749. .itsblank
  2750.  add.w #104*4,a3
  2751.  dbra d3,.drawdown
  2752.  
  2753.  addq #4,a6
  2754.  dbra d0,DRAWCHUNK
  2755.  rts
  2756.  
  2757. thirdd:
  2758. .drawdown:
  2759.  move.b (a1),d2
  2760.  addq #2,a1
  2761.  lsr.b #2,d2
  2762.  and.w #%11111,d2
  2763.  beq.s .itsblank
  2764.  move.w (a4,d2.w*2),(a3)
  2765. .itsblank
  2766.  add.w #104*4,a3
  2767.  dbra d3,.drawdown
  2768.  
  2769.  addq #4,a6
  2770.  dbra d0,DRAWCHUNK
  2771.  rts
  2772.  
  2773.  
  2774.  
  2775. ***************************************************
  2776. **************************************************
  2777.  
  2778. USEPLR2:
  2779.  
  2780.  PROTKCHECK a0
  2781.  
  2782. ***********************************
  2783.  
  2784.  move.l PLR2_Obj,a0 
  2785.  move.l ObjectPoints,a1
  2786.  move.l #ObjRotated,a2
  2787.  move.w (a0),d0
  2788.  move.l PLR2_xoff,(a1,d0.w*8)
  2789.  move.l PLR2_zoff,4(a1,d0.w*8)
  2790.  move.l PLR2_Roompt,a1
  2791.  
  2792.  moveq #0,d2
  2793.  move.b damagetaken(a0),d2
  2794.  beq .notbeenshot
  2795.  move.w #$f00,hitcol
  2796.  move.w #$f00,hitcol2
  2797.  sub.w d2,PLR2_energy
  2798.  movem.l d0-d7/a0-a6,-(a7)
  2799.  move.w #19,Samplenum
  2800.  clr.b notifplaying
  2801.  move.b #$fb,IDNUM
  2802.  move.w #0,Noisex
  2803.  move.w #0,Noisez
  2804.  move.w #100,Noisevol
  2805.  jsr MakeSomeNoise
  2806.  
  2807.  movem.l (a7)+,d0-d7/a0-a6
  2808.  
  2809. .notbeenshot
  2810.  move.b #0,damagetaken(a0)
  2811.  move.b PLR2_energy+1,numlives(a0)
  2812.  
  2813.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2814.  
  2815.  move.w (a1),12(a0)
  2816.  move.w (a1),d2
  2817.  move.l #ZoneBrightTable,a1
  2818.  move.l (a1,d2.w*4),d2
  2819.  tst.b PLR2_StoodInTop
  2820.  bne.s .okinbott
  2821.  swap d2
  2822. .okinbott:
  2823.  
  2824.  move.w d2,2(a0)
  2825.  
  2826.  move.l PLR2_yoff,d0
  2827.  move.l p2_height,d1
  2828.  asr.l #1,d1
  2829.  add.l d1,d0
  2830.  asr.l #7,d0
  2831.  move.w d0,4(a0)
  2832.  
  2833. ***********************************
  2834.  
  2835.  move.l PLR1_Obj,a0 
  2836.  
  2837.  move.w PLR1_angpos,d0
  2838.  and.w #8190,d0
  2839.  move.w d0,Facing(a0)
  2840.  
  2841.  jsr ViewpointToDraw
  2842.  asl.w #2,d0
  2843.  moveq #0,d1
  2844.  move.b p1_bobble,d1
  2845.  not.b d1
  2846.  lsr.b #3,d1
  2847.  and.b #$3,d1
  2848.  add.w d1,d0
  2849.  move.w d0,10(a0)
  2850.  move.w #10,8(a0)
  2851.  
  2852.  move.l ObjectPoints,a1
  2853.  move.l #ObjRotated,a2
  2854.  move.w (a0),d0
  2855.  move.l PLR1_xoff,(a1,d0.w*8)
  2856.  move.l PLR1_zoff,4(a1,d0.w*8)
  2857.  move.l PLR1_Roompt,a1
  2858.  
  2859.  moveq #0,d2
  2860.  move.b damagetaken(a0),d2
  2861.  beq .notbeenshot2
  2862.  sub.w d2,PLR1_energy
  2863. .notbeenshot2
  2864.  move.b #0,damagetaken(a0)
  2865.  move.b PLR1_energy+1,numlives(a0)
  2866.  
  2867.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2868.  
  2869.  move.w (a1),12(a0)
  2870.  move.w (a1),d2
  2871.  move.l #ZoneBrightTable,a1
  2872.  move.l (a1,d2.w*4),d2
  2873.  tst.b PLR1_StoodInTop
  2874.  bne.s .okinbott2
  2875.  swap d2
  2876. .okinbott2:
  2877.  
  2878.  move.w d2,2(a0)
  2879.  
  2880.  move.l PLR1_yoff,d0
  2881.  move.l p1_height,d1
  2882.  asr.l #1,d1
  2883.  add.l d1,d0
  2884.  asr.l #7,d0
  2885.  move.w d0,4(a0)
  2886.  
  2887. **********************************
  2888.  
  2889.  move.l PLR2_Obj,a0
  2890.  move.w #-1,12+64(a0)
  2891.  
  2892.  rts
  2893.  
  2894.  
  2895. GunSelected: dc.b 0
  2896.  even
  2897.  
  2898. GunAnims:
  2899.  dc.l MachineAnim,3
  2900.  dc.l PlasmaAnim,5
  2901.  dc.l RocketAnim,5
  2902.  dc.l FlameThrowerAnim,5
  2903.  dc.l GrenadeAnim,12
  2904.  dc.l 0,0
  2905.  dc.l 0,0
  2906.  dc.l ShotGunAnim,12+19+11+20+1
  2907.  
  2908. MachineAnim:
  2909.  dc.w 0,1,2,3
  2910. PlasmaAnim:
  2911.  dc.w 0,1,2,3,3,3
  2912. RocketAnim:
  2913.  dc.w 0,1,2,3,3,3
  2914. FlameThrowerAnim:
  2915.  dc.w 0,1,2,3,3,3
  2916. GrenadeAnim:
  2917.  dc.w 0,1,1,1,1
  2918.  dc.w 2,2,2,2,3
  2919.  dc.w 3,3,3
  2920. ShotGunAnim:
  2921.  dc.w 0
  2922.  dcb.w 12,2
  2923.  dcb.w 19,1
  2924.  dcb.w 11,2
  2925.  dcb.w 20,0
  2926.  dc.w 3
  2927.  
  2928. GunData: dc.l 0
  2929.  
  2930. PLR1_GunData:
  2931. ; 0=Pistol 1=Big Gun
  2932. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2933.  
  2934. ; VISIBLE/INSTANT (0/FF)
  2935. ; damage,gotgun(b)
  2936. ; Delay (w), Lifetime of bullet (w)
  2937. ; Click or hold down (0,1)
  2938. ; BulSpd: (w)
  2939.  
  2940. ;0
  2941.  dc.w 0
  2942. ;2
  2943.  dc.b 8,3
  2944. ;4
  2945.  dc.b 15
  2946. ;5
  2947.  dc.b -1
  2948. ;6
  2949.  dc.b 4,$ff
  2950. ;8
  2951.  dc.w 5,-1,1,0
  2952. ;16
  2953.  dc.w 0,0,0
  2954. ;22
  2955.  dc.w 1
  2956.  
  2957.  ds.w 4
  2958.  
  2959. ;PlasmaGun
  2960.  
  2961.  dc.w 0
  2962.  dc.b 8,1
  2963.  dc.b 20
  2964.  dc.b 0
  2965.  dc.b 16,0
  2966.  dc.w 10,-1,0,5
  2967.  dc.w 0,0,0
  2968.  dc.w 1
  2969.  
  2970.  ds.w 4
  2971.  
  2972. ;RocketLauncher
  2973.  
  2974.  dc.w 0
  2975.  dc.b 8,9
  2976.  dc.b 2
  2977.  dc.b 0
  2978.  dc.b 12,0
  2979.  dc.w 30,-1,0,5
  2980.  dc.w 0,0,0
  2981.  dc.w 1
  2982.  
  2983.  
  2984.  ds.w 4
  2985.  
  2986. ; FlameThrower
  2987.  
  2988.  dc.w 90*8
  2989.  dc.b 1,22
  2990.  dc.b 40
  2991.  dc.b 0
  2992.  dc.b 8,$0    
  2993.  dc.w 5,50,1,4
  2994.  dc.w 0,0,0
  2995.  dc.w 1
  2996.  
  2997.  ds.w 4
  2998.  
  2999. ;Grenade launcher
  3000.  
  3001.  
  3002.  dc.w 0
  3003.  dc.b 8,9
  3004.  dc.b 6
  3005.  dc.b 0
  3006.  dc.b 8,0
  3007.  dc.w 50,100,1,5
  3008.  dc.w 60,3
  3009.  dc.w -1000
  3010.  dc.w 1
  3011.  
  3012.  ds.w 4
  3013.  
  3014. ; WORMGUN
  3015.  
  3016.  dc.w 0
  3017.  dc.b 0,0
  3018.  dc.b 0
  3019.  dc.b 0,0
  3020.  dc.w 0,-1,0,5
  3021.  dc.w 0,0
  3022.  dc.w 0
  3023.  dc.w 1
  3024.  ds.w 4
  3025.  
  3026. ; ToughMarineGun
  3027.  
  3028.  dc.w 0
  3029.  dc.b 0,0
  3030.  dc.b 0
  3031.  dc.b 0,0
  3032.  dc.w 0,-1,0,5
  3033.  dc.w 0,0
  3034.  dc.w 0
  3035.  dc.w 1
  3036.  ds.w 4
  3037.  
  3038. ; Shotgun
  3039.  
  3040. ;0
  3041.  dc.w 0
  3042. ;2
  3043.  dc.b 8,21
  3044. ;4
  3045.  dc.b 15
  3046. ;5
  3047.  dc.b -1
  3048. ;6
  3049.  dc.b 4,0
  3050. ;8
  3051.  dc.w 50,-1,1,0
  3052. ;16
  3053.  dc.w 0,0,0
  3054. ;22
  3055.  dc.w 7
  3056.  
  3057.  ds.w 4
  3058.  
  3059. PLR2_GunData:
  3060. ; 0=Pistol 1=Big Gun
  3061. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  3062.  
  3063. ; VISIBLE/INSTANT (0/FF)
  3064. ; damage,gotgun(b)
  3065. ; Delay (w)
  3066.  
  3067. ;0
  3068.  dc.w 0
  3069. ;2
  3070.  dc.b 8,3
  3071. ;4
  3072.  dc.b 15
  3073. ;5
  3074.  dc.b -1
  3075. ;6
  3076.  dc.b 4,$ff
  3077. ;8
  3078.  dc.w 5,-1,1,0
  3079. ;16
  3080.  dc.w 0,0,0
  3081. ;22
  3082.  dc.w 1
  3083.  
  3084.  ds.w 4
  3085.  
  3086. ;PlasmaGun
  3087.  
  3088.  dc.w 0
  3089.  dc.b 8,1
  3090.  dc.b 20
  3091.  dc.b 0
  3092.  dc.b 16,0
  3093.  dc.w 10,-1,0,5
  3094.  dc.w 0,0,0
  3095.  dc.w 1
  3096.  
  3097.  ds.w 4
  3098.  
  3099. ;RocketLauncher
  3100.  
  3101.  dc.w 0
  3102.  dc.b 8,9
  3103.  dc.b 2
  3104.  dc.b 0
  3105.  dc.b 12,0
  3106.  dc.w 30,-1,0,5
  3107.  dc.w 0,0,0
  3108.  dc.w 1
  3109.  
  3110.  
  3111.  ds.w 4
  3112.  
  3113. ; FlameThrower
  3114.  
  3115.  dc.w 90*8
  3116.  dc.b 1,22
  3117.  dc.b 40
  3118.  dc.b 0
  3119.  dc.b 8,$0    
  3120.  dc.w 5,50,1,4
  3121.  dc.w 0,0,0
  3122.  dc.w 1
  3123.  
  3124.  ds.w 4
  3125.  
  3126. ;Grenade launcher
  3127.  
  3128.  
  3129.  dc.w 0
  3130.  dc.b 8,9
  3131.  dc.b 6
  3132.  dc.b 0
  3133.  dc.b 8,0
  3134.  dc.w 50,100,1,5
  3135.  dc.w 60,3
  3136.  dc.w -1000
  3137.  dc.w 1
  3138.  
  3139.  ds.w 4
  3140.  
  3141. ; WORMGUN
  3142.  
  3143.  dc.w 0
  3144.  dc.b 0,0
  3145.  dc.b 0
  3146.  dc.b 0,0
  3147.  dc.w 0,-1,0,5
  3148.  dc.w 0,0
  3149.  dc.w 0
  3150.  dc.w 1
  3151.  ds.w 4
  3152.  
  3153. ; ToughMarineGun
  3154.  
  3155.  dc.w 0
  3156.  dc.b 0,0
  3157.  dc.b 0
  3158.  dc.b 0,0
  3159.  dc.w 0,-1,0,5
  3160.  dc.w 0,0
  3161.  dc.w 0
  3162.  dc.w 1
  3163.  ds.w 4
  3164.  
  3165. ; Shotgun
  3166.  
  3167. ;0
  3168.  dc.w 0
  3169. ;2
  3170.  dc.b 8,21
  3171. ;4
  3172.  dc.b 15
  3173. ;5
  3174.  dc.b -1
  3175. ;6
  3176.  dc.b 4,0
  3177. ;8
  3178.  dc.w 50,-1,1,0
  3179. ;16
  3180.  dc.w 0,0,0
  3181. ;22
  3182.  dc.w 7
  3183.  
  3184.  ds.w 4
  3185.  
  3186.  
  3187.  
  3188. protA: dc.w 0
  3189.  
  3190. Path:
  3191. ; incbin "testpath"
  3192. endpath:
  3193. pathpt: dc.l Path
  3194.  
  3195.  
  3196. PLR1KEYS: dc.b 0
  3197. PLR1PATH: dc.b 0
  3198. PLR1MOUSE: dc.b -1
  3199. PLR1JOY: dc.b 0
  3200. PLR2KEYS: dc.b 0
  3201. PLR2PATH: dc.b 0
  3202. PLR2MOUSE: dc.b -1
  3203. PLR2JOY: dc.b 0
  3204.  
  3205.  even
  3206.  
  3207. PLR1_bobble: dc.w 0
  3208. PLR2_bobble: dc.w 0
  3209. xwobble: dc.l 0
  3210. xwobxoff: dc.w 0
  3211.  
  3212. xwobzoff: dc.w 0
  3213.  
  3214. PLR1_Control:
  3215.  
  3216. ; Take a snapshot of everything.
  3217.  
  3218.  move.l PLR1_xoff,d2
  3219.  move.l d2,PLR1_oldxoff
  3220.  move.l d2,oldx
  3221.  move.l PLR1_zoff,d3
  3222.  move.l d3,PLR1_oldzoff
  3223.  move.l d3,oldz
  3224.  move.l p1_xoff,d0
  3225.  move.l d0,PLR1_xoff
  3226.  move.l d0,newx
  3227.  move.l p1_zoff,d1
  3228.  move.l d1,newz
  3229.  move.l d1,PLR1_zoff
  3230.  
  3231.  move.l p1_height,PLR1_height
  3232.  
  3233.  sub.l d2,d0
  3234.  sub.l d3,d1
  3235.  move.l d0,xdiff
  3236.  move.l d1,zdiff
  3237.  move.w p1_angpos,d0
  3238.  move.w d0,PLR1_angpos
  3239.  
  3240.  move.l #SineTable,a1
  3241.  move.w (a1,d0.w),PLR1_sinval
  3242.  add.w #2048,d0
  3243.  and.w #8190,d0
  3244.  move.w (a1,d0.w),PLR1_cosval
  3245.  
  3246.  move.l p1_yoff,d0
  3247.  move.w p1_bobble,d1
  3248.  move.w (a1,d1.w),d1
  3249.  move.w d1,d3
  3250.  ble.s notnegative
  3251.  neg.w d1
  3252. notnegative:
  3253.  add.w #16384,d1
  3254.  asr.w #4,d1
  3255.  
  3256.  tst.b PLR1_Ducked
  3257.  bne.s .notdouble
  3258.  add.w d1,d1
  3259. .notdouble
  3260.  ext.l d1
  3261.  move.l PLR1_height,d4
  3262.  sub.l d1,d4
  3263.  add.l d1,d0
  3264.  
  3265.  cmp.b #'s',mors
  3266.  beq.s .otherwob
  3267.  asr.w #6,d3
  3268.  ext.l d3
  3269.  move.l d3,xwobble
  3270.  move.w PLR1_sinval,d1
  3271.  muls d3,d1
  3272.  move.w PLR1_cosval,d2
  3273.  muls d3,d2
  3274.  swap d1
  3275.  swap d2
  3276.  asr.w #7,d1
  3277.  move.w d1,xwobxoff
  3278.  asr.w #7,d2
  3279.  neg.w d2
  3280.  move.w d2,xwobzoff
  3281. .otherwob
  3282.  
  3283.  move.l d0,PLR1_yoff
  3284.  move.l d0,newy
  3285.  move.l d0,oldy
  3286.  
  3287.  move.l d4,thingheight
  3288.  move.l #40*256,StepUpVal
  3289.  tst.b PLR1_Ducked
  3290.  beq.s .okbigstep
  3291.  move.l #10*256,StepUpVal
  3292. .okbigstep:
  3293.  
  3294.  move.l #$1000000,StepDownVal
  3295.  
  3296.  move.l PLR1_Roompt,a0
  3297.  move.w ToTelZone(a0),d0
  3298.  blt .noteleport
  3299.  
  3300.  move.w ToTelX(a0),newx
  3301.  move.w ToTelZ(a0),newz
  3302.  move.w #-1,CollId
  3303.  move.l #%111111111111111111,CollideFlags
  3304.  bsr Collision
  3305.  tst.b hitwall
  3306.  beq.s .teleport
  3307.  
  3308.  move.w PLR1_xoff,newx
  3309.  move.w PLR1_zoff,newz
  3310.  bra .noteleport
  3311.  
  3312. .teleport:
  3313.  
  3314.  move.l PLR1_Roompt,a0
  3315.  move.w ToTelZone(a0),d0
  3316.  move.w ToTelX(a0),PLR1_xoff
  3317.  move.w ToTelZ(a0),PLR1_zoff
  3318.  move.l PLR1_yoff,d1
  3319.  sub.l ToZoneFloor(a0),d1
  3320.  move.l ZoneAdds,a0
  3321.  move.l (a0,d0.w*4),a0
  3322.  add.l LEVELDATA,a0
  3323.  move.l a0,PLR1_Roompt
  3324.  add.l ToZoneFloor(a0),d1
  3325.  move.l d1,PLR1s_yoff
  3326.  move.l d1,PLR1_yoff
  3327.  move.l d1,PLR1s_tyoff
  3328.  move.l PLR1_xoff,PLR1s_xoff
  3329.  move.l PLR1_zoff,PLR1s_zoff
  3330.  
  3331.  SAVEREGS
  3332.  move.w #0,Noisex
  3333.  move.w #0,Noisez
  3334.  move.w #26,Samplenum
  3335.  move.w #100,Noisevol
  3336.  move.b #$fa,IDNUM
  3337.  jsr MakeSomeNoise
  3338.  GETREGS
  3339.  
  3340.  bra .cantmove
  3341.  
  3342. .noteleport:
  3343.  
  3344.  move.l PLR1_Roompt,objroom
  3345.  move.w #%100000000,wallflags
  3346.  move.b PLR1_StoodInTop,StoodInTop
  3347.  
  3348.  move.l #%1011111110111000001,CollideFlags
  3349.  move.w #-1,CollId
  3350.  
  3351.  bsr Collision
  3352.  tst.b hitwall
  3353.  beq.s .nothitanything
  3354.  move.w oldx,PLR1_xoff
  3355.  move.w oldz,PLR1_zoff
  3356.  move.l PLR1_xoff,PLR1s_xoff
  3357.  move.l PLR1_zoff,PLR1s_zoff
  3358.  bra .cantmove
  3359. .nothitanything:
  3360.  
  3361.  move.w #40,extlen
  3362.  move.b #0,awayfromwall
  3363.  
  3364.  clr.b exitfirst
  3365.  clr.b wallbounce
  3366.  bsr MoveObject
  3367.  move.b StoodInTop,PLR1_StoodInTop
  3368.  move.l objroom,PLR1_Roompt
  3369.  move.w newx,PLR1_xoff
  3370.  move.w newz,PLR1_zoff
  3371.  move.l PLR1_xoff,PLR1s_xoff
  3372.  move.l PLR1_zoff,PLR1s_zoff
  3373.  
  3374. .cantmove:
  3375.  
  3376.  move.l PLR1_Roompt,a0
  3377.  
  3378.  move.l ToZoneFloor(a0),d0
  3379.  tst.b PLR1_StoodInTop
  3380.  beq.s notintop
  3381.  move.l ToUpperFloor(a0),d0
  3382. notintop:
  3383.  
  3384.  adda.w #ToZonePts,a0
  3385.  sub.l PLR1_height,d0
  3386.  move.l d0,PLR1s_tyoff
  3387.  move.w p1_angpos,tmpangpos
  3388.  
  3389. ; move.l (a0),a0        ; jump to viewpoint list
  3390.  * A0 is pointing at a pointer to list of points to rotate
  3391.  move.w (a0)+,d1
  3392.  ext.l d1
  3393.  add.l PLR1_Roompt,d1
  3394.  move.l d1,PLR1_PointsToRotatePtr
  3395.  tst.w (a0)+
  3396.  sne.s DRAWNGRAPHTOP
  3397.  beq.s nobackgraphics
  3398.  cmp.b #'s',mors
  3399.  beq.s nobackgraphics
  3400.  move.l a0,-(a7)
  3401.  jsr putinbackdrop 
  3402.  move.l (a7)+,a0
  3403. nobackgraphics:
  3404.  adda.w #10,a0
  3405.  move.l a0,PLR1_ListOfGraphRooms
  3406.  
  3407. *************************************************
  3408.  rts
  3409.  
  3410. DRAWNGRAPHTOP
  3411.  
  3412. tstzone: dc.l 0
  3413. CollId: dc.w 0
  3414.  
  3415. PLR2_Control:
  3416.  
  3417.  PROTLCHECK a0
  3418.  
  3419. ; Take a snapshot of everything.
  3420.  
  3421.  move.l PLR2_xoff,d2
  3422.  move.l d2,PLR2_oldxoff
  3423.  move.l d2,oldx
  3424.  move.l PLR2_zoff,d3
  3425.  move.l d3,PLR2_oldzoff
  3426.  move.l d3,oldz
  3427.  move.l p2_xoff,d0
  3428.  move.l d0,PLR2_xoff
  3429.  move.l d0,newx
  3430.  move.l p2_zoff,d1
  3431.  move.l d1,newz
  3432.  move.l d1,PLR2_zoff
  3433.  
  3434.  move.l p2_height,PLR2_height
  3435.  
  3436.  sub.l d2,d0
  3437.  sub.l d3,d1
  3438.  move.l d0,xdiff
  3439.  move.l d1,zdiff
  3440.  move.w p2_angpos,d0
  3441.  move.w d0,PLR2_angpos
  3442.  
  3443.  move.l #SineTable,a1
  3444.  move.w (a1,d0.w),PLR2_sinval
  3445.  add.w #2048,d0
  3446.  and.w #8190,d0
  3447.  move.w (a1,d0.w),PLR2_cosval
  3448.  
  3449.  move.l p2_yoff,d0
  3450.  move.w p2_bobble,d1
  3451.  move.w (a1,d1.w),d1
  3452.  move.w d1,d3
  3453.  ble.s .notnegative
  3454.  neg.w d1
  3455. .notnegative:
  3456.  add.w #16384,d1
  3457.  asr.w #4,d1
  3458.  add.w d1,d1
  3459.  ext.l d1
  3460.  move.l PLR2_height,d4
  3461.  sub.l d1,d4
  3462.  add.l d1,d0
  3463.  
  3464.  cmp.b #'s',mors
  3465.  bne.s .otherwob
  3466.  asr.w #6,d3
  3467.  ext.l d3
  3468.  move.l d3,xwobble
  3469.  move.w PLR2_sinval,d1
  3470.  muls d3,d1
  3471.  move.w PLR2_cosval,d2
  3472.  muls d3,d2
  3473.  swap d1
  3474.  swap d2
  3475.  asr.w #7,d1
  3476.  move.w d1,xwobxoff
  3477.  asr.w #7,d2
  3478.  neg.w d2
  3479.  move.w d2,xwobzoff
  3480. .otherwob
  3481.  
  3482.  move.l d0,PLR2_yoff
  3483.  move.l d0,newy
  3484.  move.l d0,oldy
  3485.  
  3486.  move.l d4,thingheight
  3487.  move.l #40*256,StepUpVal
  3488.  tst.b PLR2_Ducked
  3489.  beq.s .okbigstep
  3490.  move.l #10*256,StepUpVal
  3491. .okbigstep:
  3492.  
  3493.  move.l #$1000000,StepDownVal
  3494.  
  3495.  move.l PLR2_Roompt,a0
  3496.  move.w ToTelZone(a0),d0
  3497.  blt .noteleport
  3498.  
  3499.  move.w ToTelX(a0),newx
  3500.  move.w ToTelZ(a0),newz
  3501.  move.w #-1,CollId
  3502.  move.l #%111111111111111111,CollideFlags
  3503.  bsr Collision
  3504.  tst.b hitwall
  3505.  beq.s .teleport
  3506.  
  3507.  move.w PLR2_xoff,newx
  3508.  move.w PLR2_zoff,newz
  3509.  bra .noteleport
  3510.  
  3511. .teleport:
  3512.  
  3513.  move.l PLR2_Roompt,a0
  3514.  move.w ToTelZone(a0),d0
  3515.  move.w ToTelX(a0),PLR2_xoff
  3516.  move.w ToTelZ(a0),PLR2_zoff
  3517.  move.l PLR2_yoff,d1
  3518.  sub.l ToZoneFloor(a0),d1
  3519.  move.l ZoneAdds,a0
  3520.  move.l (a0,d0.w*4),a0
  3521.  add.l LEVELDATA,a0
  3522.  move.l a0,PLR2_Roompt
  3523.  add.l ToZoneFloor(a0),d1
  3524.  move.l d1,PLR2s_yoff
  3525.  move.l d1,PLR2_yoff
  3526.  move.l d1,PLR2s_tyoff
  3527.  move.l PLR2_xoff,PLR2s_xoff
  3528.  move.l PLR2_zoff,PLR2s_zoff
  3529.  
  3530.  SAVEREGS
  3531.  move.w #0,Noisex
  3532.  move.w #0,Noisez
  3533.  move.w #26,Samplenum
  3534.  move.w #100,Noisevol
  3535.  move.b #$fa,IDNUM
  3536.  jsr MakeSomeNoise
  3537.  GETREGS
  3538.  
  3539.  bra .cantmove
  3540.  
  3541. .noteleport:
  3542.  
  3543.  move.l PLR2_Roompt,objroom
  3544.  move.w #%100000000000,wallflags
  3545.  move.b PLR2_StoodInTop,StoodInTop
  3546.  
  3547.  move.l #%1011111010111100001,CollideFlags
  3548.  move.w #-1,CollId
  3549.  
  3550.  bsr Collision
  3551.  tst.b hitwall
  3552.  beq.s .nothitanything
  3553.  move.w oldx,PLR2_xoff
  3554.  move.w oldz,PLR2_zoff
  3555.  move.l PLR2_xoff,PLR2s_xoff
  3556.  move.l PLR2_zoff,PLR2s_zoff
  3557.  bra .cantmove
  3558. .nothitanything:
  3559.  
  3560.  move.w #40,extlen
  3561.  move.b #0,awayfromwall
  3562.  
  3563.  clr.b exitfirst
  3564.  clr.b wallbounce
  3565.  bsr MoveObject
  3566.  move.b StoodInTop,PLR2_StoodInTop
  3567.  move.l objroom,PLR2_Roompt
  3568.  move.w newx,PLR2_xoff
  3569.  move.w newz,PLR2_zoff
  3570.  move.l PLR2_xoff,PLR2s_xoff
  3571.  move.l PLR2_zoff,PLR2s_zoff
  3572.  
  3573. .cantmove
  3574.  
  3575.  move.l PLR2_Roompt,a0
  3576.  
  3577.  move.l ToZoneFloor(a0),d0
  3578.  tst.b PLR2_StoodInTop
  3579.  beq.s .notintop
  3580.  move.l ToUpperFloor(a0),d0
  3581. .notintop:
  3582.  
  3583.  adda.w #ToZonePts,a0
  3584.  sub.l PLR2_height,d0
  3585.  move.l d0,PLR2s_tyoff
  3586.  move.w p2_angpos,tmpangpos
  3587.  
  3588. ; move.l (a0),a0        ; jump to viewpoint list
  3589.  * A0 is pointing at a pointer to list of points to rotate
  3590.  move.w (a0)+,d1
  3591.  ext.l d1
  3592.  add.l PLR2_Roompt,d1
  3593.  move.l d1,PLR2_PointsToRotatePtr
  3594.  tst.w (a0)+
  3595.  beq.s .nobackgraphics
  3596.  cmp.b #'s',mors
  3597.  bne.s .nobackgraphics
  3598.  move.l a0,-(a7)
  3599.  jsr putinbackdrop 
  3600.  move.l (a7)+,a0
  3601. .nobackgraphics:
  3602.  adda.w #10,a0
  3603.  move.l a0,PLR2_ListOfGraphRooms
  3604.  
  3605. *****************************************************
  3606.  
  3607.  rts
  3608.  
  3609.  
  3610. KeyMap: ds.b 256
  3611.  
  3612. fillscrnwater:
  3613.  dc.w 0
  3614. DONTDOGUN:
  3615.  dc.w 0
  3616.  
  3617.  
  3618. DrawDisplay:
  3619.  
  3620.  
  3621.  clr.b fillscrnwater
  3622.  
  3623.  move.l #SineTable,a0
  3624.  move.w angpos,d0
  3625.  move.w (a0,d0.w),d6
  3626.  adda.w #2048,a0
  3627.  move.w (a0,d0.w),d7
  3628.  move.w d6,sinval
  3629.  move.w d7,cosval
  3630.  
  3631.  move.l #KeyMap,a5
  3632.  moveq #0,d5
  3633.  move.b look_behind_key,d5
  3634.  tst.b (a5,d5.w)
  3635.  sne DONTDOGUN
  3636.  beq.s .nolookback
  3637.  neg.w cosval
  3638.  neg.w sinval
  3639. .nolookback:
  3640.  
  3641.  
  3642.  move.l yoff,d0
  3643.  asr.l #8,d0
  3644.  move.w d0,d1
  3645.  add.w #256-32,d1
  3646.  and.w #255,d1
  3647.  move.w d1,wallyoff
  3648.  asl.w #2,d0
  3649.  move.w d0,flooryoff
  3650.  
  3651.  move.w xoff,d6
  3652.  move.w d6,d3
  3653.  asr.w #1,d3
  3654.  add.w d3,d6
  3655.  asr.w #1,d6
  3656.  move.w d6,xoff34
  3657.  
  3658.  move.w zoff,d6
  3659.  move.w d6,d3
  3660.  asr.w #1,d3
  3661.  add.w d3,d6
  3662.  asr.w #1,d6
  3663.  move.w d6,zoff34
  3664.  
  3665.  bsr RotateLevelPts
  3666.  bsr RotateObjectPts
  3667.  bsr CalcPLR1InLine
  3668.  
  3669.  
  3670.  cmp.b #'n',mors
  3671.  bne.s doplr2too
  3672.  move.l PLR2_Obj,a0
  3673.  move.w #-1,12(a0)
  3674.  move.w #-1,GraphicRoom(a0)
  3675.  bra noplr2either
  3676.  
  3677. doplr2too:
  3678.  bsr CalcPLR2InLine
  3679. noplr2either:
  3680.  
  3681.  move.l endoflist,a0
  3682. subroomloop:
  3683.  move.w -(a0),d7
  3684.  blt jumpoutofrooms
  3685.  
  3686. ; bsr setlrclip
  3687. ; move.w leftclip,d0
  3688. ; cmp.w rightclip,d0
  3689. ; bge subroomloop
  3690.  move.l a0,-(a7)
  3691.  
  3692.  move.l ZoneAdds,a0
  3693.  move.l (a0,d7.w*4),a0
  3694.  add.l LEVELDATA,a0
  3695.  move.l ToZoneRoof(a0),SplitHeight
  3696.  move.l a0,ROOMBACK
  3697.  
  3698.  move.l ZoneGraphAdds,a0
  3699.  move.l 4(a0,d7.w*8),a2
  3700.  move.l (a0,d7.w*8),a0
  3701.  
  3702.  add.l LEVELGRAPHICS,a0
  3703.  add.l LEVELGRAPHICS,a2
  3704.  move.l a2,ThisRoomToDraw+4
  3705.  move.l a0,ThisRoomToDraw
  3706.  
  3707.  move.l ListOfGraphRooms,a1
  3708.  
  3709.  
  3710.  
  3711. finditit:
  3712.  tst.w (a1)
  3713.  blt nomoretodoatall
  3714.  cmp.w (a1),d7
  3715.  beq outoffind
  3716.  adda.w #8,a1
  3717.  bra finditit
  3718.  
  3719. outoffind:
  3720.  
  3721.  move.l a1,-(a7)
  3722.  
  3723.  
  3724.  move.w #0,leftclip
  3725.  move.w #96,rightclip
  3726.  moveq #0,d7
  3727.  move.w 2(a1),d7
  3728.  blt.s outofrcliplop
  3729.  move.l LEVELCLIPS,a0
  3730.  lea (a0,d7.l*2),a0
  3731.  
  3732.  tst.w (a0)
  3733.  blt outoflcliplop
  3734.  
  3735.  bsr NEWsetlclip
  3736.  
  3737. intolcliplop:        ; clips
  3738.  tst.w (a0)
  3739.  blt outoflcliplop
  3740.  
  3741.  bsr NEWsetlclip 
  3742.  bra intolcliplop
  3743.  
  3744. outoflcliplop:
  3745.  
  3746.  addq #2,a0
  3747.  
  3748.  tst.w (a0)
  3749.  blt outofrcliplop
  3750.  
  3751.  bsr NEWsetrclip
  3752.  
  3753. intorcliplop:        ; clips
  3754.  tst.w (a0)
  3755.  blt outofrcliplop
  3756.  
  3757.  bsr NEWsetrclip 
  3758.  bra intorcliplop
  3759.  
  3760. outofrcliplop:
  3761.  
  3762.  
  3763.  move.w leftclip,d0
  3764.  cmp.w #96,d0
  3765.  bge dontbothercantseeit
  3766.  move.w rightclip,d1
  3767.  blt dontbothercantseeit
  3768.  cmp.w d1,d0
  3769.  bge dontbothercantseeit
  3770.  
  3771.  move.l yoff,d0
  3772.  cmp.l SplitHeight,d0
  3773.  blt botfirst
  3774.  
  3775.  move.l ThisRoomToDraw+4,a0
  3776.  cmp.l LEVELGRAPHICS,a0
  3777.  beq.s noupperroom
  3778.  st DOUPPER
  3779.  
  3780.  move.l ROOMBACK,a1
  3781.  move.l ToUpperRoof(a1),TOPOFROOM
  3782.  move.l ToUpperFloor(a1),BOTOFROOM
  3783.  
  3784.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3785.  bsr dothisroom
  3786. noupperroom:
  3787.  move.l ThisRoomToDraw,a0
  3788.  clr.b DOUPPER
  3789.  move.l #CurrentPointBrights,PointBrightsPtr
  3790.  
  3791.  move.l ROOMBACK,a1
  3792.  move.l ToZoneRoof(a1),d0
  3793.  move.l d0,TOPOFROOM
  3794.  move.l ToZoneFloor(a1),d1
  3795.  move.l d1,BOTOFROOM
  3796.  
  3797.  move.l ToZoneWater(a1),d2
  3798.  cmp.l yoff,d2
  3799.  blt.s .abovefirst
  3800.  move.l d2,BEFOREWATTOP
  3801.  move.l d1,BEFOREWATBOT
  3802.  move.l d2,AFTERWATBOT
  3803.  move.l d0,AFTERWATTOP
  3804.  bra.s .belowfirst
  3805. .abovefirst:
  3806.  move.l d0,BEFOREWATTOP
  3807.  move.l d2,BEFOREWATBOT
  3808.  move.l d1,AFTERWATBOT
  3809.  move.l d2,AFTERWATTOP
  3810. .belowfirst:
  3811.  
  3812.  bsr dothisroom
  3813.  
  3814.  bra dontbothercantseeit
  3815. botfirst:
  3816.  
  3817.  move.l ThisRoomToDraw,a0
  3818.  clr.b DOUPPER
  3819.  move.l #CurrentPointBrights,PointBrightsPtr
  3820.  
  3821.  move.l ROOMBACK,a1
  3822.  move.l ToZoneRoof(a1),d0
  3823.  move.l d0,TOPOFROOM
  3824.  move.l ToZoneFloor(a1),d1
  3825.  move.l d1,BOTOFROOM
  3826.  
  3827.  move.l ToZoneWater(a1),d2
  3828.  cmp.l yoff,d2
  3829.  blt.s .abovefirst
  3830.  move.l d2,BEFOREWATTOP
  3831.  move.l d1,BEFOREWATBOT
  3832.  move.l d2,AFTERWATBOT
  3833.  move.l d0,AFTERWATTOP
  3834.  bra.s .belowfirst
  3835. .abovefirst:
  3836.  move.l d0,BEFOREWATTOP
  3837.  move.l d2,BEFOREWATBOT
  3838.  move.l d1,AFTERWATBOT
  3839.  move.l d2,AFTERWATTOP
  3840. .belowfirst:
  3841.  
  3842.  
  3843.  bsr dothisroom
  3844.  move.l ThisRoomToDraw+4,a0
  3845.  cmp.l LEVELGRAPHICS,a0
  3846.  beq.s noupperroom2
  3847.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3848.  
  3849.  move.l ROOMBACK,a1
  3850.  move.l ToUpperRoof(a1),TOPOFROOM
  3851.  move.l ToUpperFloor(a1),BOTOFROOM
  3852.  
  3853.  st DOUPPER
  3854.  bsr dothisroom
  3855. noupperroom2:
  3856.  
  3857. dontbothercantseeit:
  3858. pastemp:
  3859.  
  3860.  move.l (a7)+,a1
  3861.  move.l ThisRoomToDraw,a0
  3862.  move.w (a0),d7
  3863.  
  3864.  adda.w #8,a1
  3865.  bra finditit
  3866.  
  3867. nomoretodoatall:
  3868.  
  3869.  move.l (a7)+,a0
  3870.  
  3871.  bra subroomloop
  3872.  
  3873. jumpoutofrooms:
  3874.  
  3875.  tst.b DONTDOGUN
  3876.  bne NOGUNLOOK
  3877.  
  3878.  cmp.b #'s',mors
  3879.  beq.s drawslavegun
  3880.  
  3881.  moveq #0,d0
  3882.  move.b PLR1_GunSelected,d0
  3883.  moveq #0,d1
  3884.  move.b PLR1_GunFrame,d1
  3885.  bsr DRAWINGUN
  3886.  bra drawngun
  3887.  
  3888. drawslavegun
  3889.  moveq #0,d0
  3890.  move.b PLR2_GunSelected,d0
  3891.  moveq #0,d1
  3892.  move.b PLR2_GunFrame,d1
  3893.  bsr DRAWINGUN
  3894.  
  3895. drawngun:
  3896.  
  3897. NOGUNLOOK:
  3898.  
  3899.  moveq #0,d1
  3900.  move.b PLR1_GunFrame,d1
  3901.  sub.w TempFrames,d1
  3902.  bgt.s .nn
  3903.  moveq #0,d1
  3904. .nn
  3905.  move.b d1,PLR1_GunFrame
  3906.  
  3907.  ble.s .donefire
  3908.  sub.b #1,PLR1_GunFrame
  3909. .donefire:
  3910.  
  3911.  moveq #0,d1
  3912.  move.b PLR2_GunFrame,d1
  3913.  sub.w TempFrames,d1
  3914.  bgt.s .nn2
  3915.  moveq #0,d1
  3916. .nn2
  3917.  move.b d2,PLR2_GunFrame
  3918.  
  3919.  ble.s .donefire2
  3920.  sub.b #1,PLR2_GunFrame
  3921. .donefire2:
  3922.  
  3923.  
  3924.  move.w #3,d5
  3925.  tst.b fillscrnwater
  3926.  beq nowaterfull
  3927.  bgt oknothalf
  3928.  moveq #1,d5
  3929. oknothalf:
  3930.  
  3931.  bclr.b #1,$bfe001
  3932.  
  3933.  move.l #brightentab,a2
  3934.  moveq #0,d2
  3935.  move.l frompt,a0
  3936.  add.l #104*4*60,a0
  3937.  
  3938.  move.w #31,d0
  3939. fw:
  3940.  move.w d5,d1
  3941.  move.l a0,a1
  3942. fwd:
  3943. val SET 104*4*19
  3944.  REPT 20
  3945.  and.w #$ff,val(a1)
  3946. val SET val-104*4
  3947.  ENDR
  3948.  sub.l #104*4*20,a1
  3949.  dbra d1,fwd
  3950.  addq #4,a0
  3951.  dbra d0,fw
  3952.  
  3953.  addq #4,a0
  3954.  
  3955.  move.w #31,d0
  3956. sw:
  3957.  move.w d5,d1
  3958.  move.l a0,a1
  3959. swd:
  3960. val SET 104*4*19
  3961.  REPT 20
  3962.  and.w #$ff,val(a1)
  3963. val SET val-104*4
  3964.  ENDR
  3965.  sub.l #104*4*20,a1
  3966.  dbra d1,swd
  3967.  addq #4,a0
  3968.  dbra d0,sw
  3969.  
  3970.  addq #4,a0
  3971.  
  3972.  move.w #31,d0
  3973. tw:
  3974.  move.w d5,d1
  3975.  move.l a0,a1
  3976. twd:
  3977. val SET 104*4*19
  3978.  REPT 20
  3979.  and.w #$ff,val(a1)
  3980. val SET val-104*4
  3981.  ENDR
  3982.  sub.l #104*4*20,a1
  3983.  dbra d1,twd
  3984.  addq #4,a0
  3985.  dbra d0,tw
  3986.  
  3987.  rts
  3988.  
  3989. nowaterfull:
  3990.  bset.b #1,$bfe001
  3991.  rts
  3992.  
  3993. prot9: dc.w 0
  3994.  
  3995. TempBuffer: ds.l 100 
  3996.  
  3997. ClipTable: ds.l 30
  3998. EndOfClipPt: dc.l 0
  3999. DOUPPER: dc.w 0
  4000.  
  4001. RealTable:
  4002.  dc.l prot1-78935450
  4003.  dc.l prot2-78935450
  4004.  dc.l prot3-78935450
  4005.  dc.l prot4-78935450
  4006.  dc.l prot5-78935450
  4007.  dc.l prot6-78935450
  4008.  dc.l prot7-78935450
  4009.  dc.l prot8-78935450
  4010.  dc.l prot9-78935450
  4011.  dc.l protA-78935450
  4012.  
  4013. dothisroom
  4014.  
  4015.  move.w (a0)+,d0
  4016.  move.w d0,currzone
  4017.  move.l #ZoneBrightTable,a1
  4018.  move.l (a1,d0.w*4),d1
  4019.  tst.b DOUPPER
  4020.  bne.s .okbot
  4021.  swap d1
  4022. .okbot:
  4023.  move.w d1,ZoneBright
  4024.  
  4025. polyloop:
  4026.  move.w (a0)+,d0
  4027.  blt jumpoutofloop
  4028.  beq itsawall
  4029.  cmp.w #3,d0
  4030.  beq itsasetclip
  4031.  blt itsafloor
  4032.  cmp.w #4,d0
  4033.  beq itsanobject
  4034.  cmp.w #5,d0
  4035.  beq itsanarc
  4036.  cmp.w #6,d0
  4037.  beq itsalightbeam
  4038.  cmp.w #7,d0
  4039.  beq.s itswater
  4040.  cmp.w #9,d0
  4041.  ble itsachunkyfloor
  4042.  cmp.w #11,d0
  4043.  ble itsabumpyfloor
  4044.  cmp.w #12,d0
  4045.  beq.s itsbackdrop
  4046.  cmp.w #13,d0
  4047.  beq.s itsaseewall
  4048.  
  4049.  bra polyloop
  4050.  
  4051. itsaseewall:
  4052.  st seethru
  4053.  jsr itsawalldraw
  4054.  bra polyloop
  4055.  
  4056. itsbackdrop:
  4057.  jsr putinbackdrop
  4058.  bra polyloop
  4059.  
  4060. itswater:
  4061.  PROTHCHECK
  4062.  move.w #3,d0
  4063.  clr.b gourfloor
  4064.  move.l #FloorLine,LineToUse
  4065.  st usewater
  4066.  clr.b usebumps
  4067.  jsr itsafloordraw
  4068.  bra polyloop
  4069.  
  4070. itsanarc:
  4071.  jsr CurveDraw
  4072.  bra polyloop
  4073.  
  4074. itsanobject:
  4075.  jsr ObjDraw
  4076.  bra polyloop
  4077.  
  4078. itsalightbeam:
  4079.  jsr LightDraw
  4080.  bra polyloop
  4081.  
  4082. itsabumpyfloor:
  4083.  sub.w #9,d0
  4084.  st usebumps
  4085.  st smoothbumps
  4086.  clr.b usewater
  4087.  move.l #BumpLine,LineToUse
  4088.  jsr itsafloordraw
  4089.  bra polyloop
  4090.  
  4091. itsachunkyfloor:
  4092.  subq.w #7,d0
  4093.  st usebumps
  4094.  sub.w #12,topclip
  4095. ; add.w #10,botclip
  4096.  clr.b smoothbumps
  4097.  clr.b usewater
  4098.  move.l #BumpLine,LineToUse
  4099.  jsr itsafloordraw
  4100.  add.w #12,topclip
  4101. ; sub.w #10,botclip
  4102.  bra polyloop 
  4103.  
  4104. itsafloor:
  4105.  
  4106.  movem.l a0/d0,-(a7)
  4107.  move.l $4.w,a6
  4108.  jsr _LVOSuperState(a6)
  4109.  move.l d0,SSTACK
  4110.  movem.l (a7)+,a0/d0
  4111.  
  4112.  move.l THEFLOORLINE,LineToUse
  4113. * 1,2 = floor/roof
  4114.  clr.b usewater
  4115.  clr.b usebumps
  4116.  move.b GOURSEL,gourfloor    
  4117.  jsr itsafloordraw
  4118.  move.l a0,-(a7)
  4119.  move.l $4.w,a6
  4120.  move.l SSTACK,d0
  4121.  jsr _LVOUserState(a6)
  4122.  move.l (a7)+,a0
  4123.  bra polyloop
  4124. itsasetclip:
  4125.  bra polyloop
  4126. itsawall:
  4127.  clr.b seethru
  4128. ; move.l #stripbuffer,a1
  4129.  jsr itsawalldraw
  4130.  bra polyloop
  4131.  
  4132. jumpoutofloop:
  4133.  rts
  4134.  
  4135. GOURSEL: dc.w 0
  4136. ThisRoomToDraw: dc.l 0,0
  4137. SplitHeight: dc.l 0
  4138.  
  4139.  include "ab3:source/OrderZones"
  4140.  
  4141. ReadMouse:
  4142.  move.l #$dff000,a6
  4143.  clr.l d0
  4144.  clr.l d1
  4145.  move.w $a(a6),d0
  4146.  lsr.w #8,d0
  4147.  ext.l d0
  4148.  move.w d0,d3
  4149.  move.w oldmy,d2
  4150.  sub.w d2,d0
  4151.  
  4152.  cmp.w #127,d0
  4153.  blt nonegy
  4154.  move.w #255,d1
  4155.  sub.w d0,d1
  4156.  move.w d1,d0
  4157.  neg.w d0
  4158. nonegy:
  4159.  
  4160.  cmp.w #-127,d0
  4161.  bge nonegy2
  4162.  move.w #255,d1
  4163.  add.w d0,d1
  4164.  move.w d1,d0
  4165. nonegy2:
  4166.  
  4167.  add.b d0,d2
  4168.  add.w d0,oldy2
  4169.  move.w d2,oldmy
  4170.  move.w d2,d0
  4171.  
  4172.  move.w oldy2,d0
  4173.  move.w d0,ymouse
  4174.  
  4175.  clr.l d0
  4176.  clr.l d1
  4177.  move.w $a(a6),d0
  4178.  ext.w d0
  4179.  ext.l d0
  4180.  move.w d0,d3
  4181.  move.w oldmx,d2
  4182.  sub.w d2,d0
  4183.  
  4184.  cmp.w #127,d0
  4185.  blt nonegx
  4186.  move.w #255,d1
  4187.  sub.w d0,d1
  4188.  move.w d1,d0
  4189.  neg.w d0
  4190. nonegx:
  4191.  
  4192.  cmp.w #-127,d0
  4193.  bge nonegx2
  4194.  move.w #255,d1
  4195.  add.w d0,d1
  4196.  move.w d1,d0
  4197. nonegx2:
  4198.  
  4199.  add.b d0,d2
  4200.  move.w d0,d1
  4201.  move.w d2,oldmx
  4202.  
  4203.  move.w #$0,$dff034
  4204.  
  4205.  add.w d0,oldx2
  4206.  move.w oldx2,d0
  4207.  and.w #2047,d0
  4208.  move.w d0,oldx2
  4209.  
  4210.  asl.w #2,d0
  4211.  sub.w prevx,d0
  4212.  add.w d0,prevx
  4213.  add.w d0,angpos
  4214.  move.w #0,lrs
  4215.  rts
  4216.  
  4217. noturn:
  4218.  
  4219. ; got to move lr instead. 
  4220.  
  4221. ; d1 = speed moved l/r
  4222.  
  4223.  move.w d1,lrs
  4224.  
  4225.  rts
  4226.  
  4227. lrs: dc.w 0
  4228. prevx: dc.w 0
  4229.  
  4230. angpos: dc.w 0
  4231. mang: dc.w 0
  4232. oldymouse: dc.w 0
  4233. xmouse: dc.w 0
  4234. ymouse: dc.w 0
  4235. oldx2: dc.w 0
  4236. oldmx: dc.w 0
  4237. oldmy: dc.w 0
  4238. oldy2: dc.w 0
  4239.  
  4240. RotateLevelPts:
  4241.  
  4242.  move.w sinval,d6
  4243.  swap d6
  4244.  move.w cosval,d6
  4245.  
  4246.  move.l PointsToRotatePtr,a0
  4247.  move.l Points,a3
  4248.  move.l #Rotated,a1
  4249.  move.l #OnScreen,a2
  4250.  move.w xoff,d4
  4251.  move.w zoff,d5
  4252.  
  4253. ; move.w #$c40,$dff106
  4254. ; move.w #$f00,$dff180
  4255.  
  4256. pointrotlop:
  4257.  move.w (a0)+,d7
  4258.  blt.s outofpointrot
  4259.  
  4260.  move.w (a3,d7*4),d0
  4261.  sub.w d4,d0
  4262.  move.w d0,d2
  4263.  move.w 2(a3,d7*4),d1
  4264.  sub.w d5,d1
  4265.  muls d6,d2
  4266.  swap d6
  4267.  move.w d1,d3
  4268.  muls d6,d3
  4269.  sub.l d3,d2
  4270.  add.l d2,d2
  4271.  swap d2
  4272.  ext.l d2
  4273.  asl.l #7,d2
  4274.  add.l xwobble,d2
  4275.  move.l d2,(a1,d7*8)
  4276.  
  4277.  muls d6,d0
  4278.  swap d6
  4279.  muls d6,d1
  4280.  add.l d0,d1
  4281.  asl.l #2,d1
  4282.  swap d1
  4283.  move.l d1,4(a1,d7*8)
  4284.  
  4285.  tst.w d1
  4286.  bgt.s ptnotbehind
  4287.  tst.w d2
  4288.  bgt.s onrightsomewhere
  4289.  move.w #0,d2
  4290.  bra putin
  4291. onrightsomewhere:
  4292.  move.w #96,d2
  4293.  bra putin
  4294. ptnotbehind:
  4295.  
  4296.  divs d1,d2
  4297.  add.w #47,d2
  4298. putin:
  4299.  move.w d2,(a2,d7*2)
  4300.  
  4301.  bra pointrotlop
  4302. outofpointrot:
  4303.  
  4304. ; move.w #$c40,$dff106
  4305. ; move.w #$ff0,$dff180
  4306.  
  4307.  rts
  4308.  
  4309. PLR1_ObjDists
  4310.  ds.w 250
  4311. PLR2_ObjDists
  4312.  ds.w 250
  4313.  
  4314. CalcPLR1InLine:
  4315.  
  4316.  move.w PLR1_sinval,d5
  4317.  move.w PLR1_cosval,d6
  4318.  move.l ObjectData,a4
  4319.  move.l ObjectPoints,a0
  4320.  move.w NumObjectPoints,d7
  4321.  move.l #PLR1_ObsInLine,a2
  4322.  move.l #PLR1_ObjDists,a3
  4323.  
  4324. .objpointrotlop:
  4325.  
  4326.  move.w (a0),d0
  4327.  sub.w PLR1_xoff,d0
  4328.  move.w 4(a0),d1
  4329.  addq #8,a0
  4330.  
  4331.  tst.w 12(a4)
  4332.  blt .noworkout
  4333.  
  4334.  moveq #0,d2
  4335.  move.b 16(a4),d2
  4336.  move.l #ColBoxTable,a6
  4337.  lea (a6,d2.w*8),a6
  4338.  
  4339.  sub.w PLR1_zoff,d1
  4340.  move.w d0,d2
  4341.  muls d6,d2
  4342.  move.w d1,d3
  4343.  muls d5,d3
  4344.  sub.l d3,d2
  4345.  add.l d2,d2
  4346.  
  4347.  bgt.s .okh
  4348.  neg.l d2
  4349. .okh:
  4350.  swap d2
  4351.  
  4352.  muls d5,d0
  4353.  muls d6,d1
  4354.  add.l d0,d1
  4355.  asl.l #2,d1
  4356.  swap d1
  4357.  moveq #0,d3
  4358.  
  4359.  tst.w d1
  4360.  ble.s .notinline
  4361.  asr.w #1,d2
  4362.  cmp.w (a6),d2
  4363.  bgt.s .notinline
  4364.  
  4365.  st d3
  4366. .notinline
  4367.  move.b d3,(a2)+
  4368.  
  4369.  move.w d1,(a3)+
  4370.  
  4371.  add.w #64,a4
  4372.  dbra d7,.objpointrotlop
  4373.  
  4374.  rts
  4375.  
  4376. .noworkout:
  4377.  move.b #0,(a2)+
  4378.  move.w #0,(a3)+
  4379.  add.w #64,a4
  4380.  dbra d7,.objpointrotlop
  4381.  rts
  4382.  
  4383.  
  4384. CalcPLR2InLine:
  4385.  
  4386.  move.w PLR2_sinval,d5
  4387.  move.w PLR2_cosval,d6
  4388.  move.l ObjectData,a4
  4389.  move.l ObjectPoints,a0
  4390.  move.w NumObjectPoints,d7
  4391.  move.l #PLR2_ObsInLine,a2
  4392.  move.l #PLR2_ObjDists,a3
  4393.  
  4394. .objpointrotlop:
  4395.  
  4396.  move.w (a0),d0
  4397.  sub.w PLR2_xoff,d0
  4398.  move.w 4(a0),d1
  4399.  addq #8,a0
  4400.  
  4401.  tst.w 12(a4)
  4402.  blt .noworkout
  4403.  
  4404.  moveq #0,d2
  4405.  move.b 16(a4),d2
  4406.  move.l #ColBoxTable,a6
  4407.  lea (a6,d2.w*8),a6
  4408.  
  4409.  sub.w PLR2_zoff,d1
  4410.  move.w d0,d2
  4411.  muls d6,d2
  4412.  move.w d1,d3
  4413.  muls d5,d3
  4414.  sub.l d3,d2
  4415.  add.l d2,d2
  4416.  
  4417.  bgt.s .okh
  4418.  neg.l d2
  4419. .okh:
  4420.  swap d2
  4421.  
  4422.  muls d5,d0
  4423.  muls d6,d1
  4424.  add.l d0,d1
  4425.  asl.l #2,d1
  4426.  swap d1
  4427.  moveq #0,d3
  4428.  
  4429.  tst.w d1
  4430.  ble.s .notinline
  4431.  asr.w #1,d2
  4432.  cmp.w (a6),d2
  4433.  bgt.s .notinline
  4434.  
  4435.  st d3
  4436. .notinline
  4437.  move.b d3,(a2)+
  4438.  
  4439.  move.w d1,(a3)+
  4440.  
  4441.  add.w #64,a4
  4442.  dbra d7,.objpointrotlop
  4443.  
  4444.  rts
  4445.  
  4446. .noworkout:
  4447.  move.w #0,(a3)+
  4448.  move.b #0,(a2)+
  4449.  add.w #64,a4
  4450.  dbra d7,.objpointrotlop
  4451.  rts
  4452.  
  4453.  
  4454. RotateObjectPts:
  4455.  
  4456.  move.w sinval,d5
  4457.  move.w cosval,d6
  4458.  
  4459.  move.l ObjectData,a4
  4460.  move.l ObjectPoints,a0
  4461.  move.w NumObjectPoints,d7
  4462.  move.l #ObjRotated,a1
  4463.  
  4464. .objpointrotlop:
  4465.  
  4466.  move.w (a0),d0
  4467.  sub.w xoff,d0
  4468.  move.w 4(a0),d1
  4469.  addq #8,a0
  4470.  
  4471.  tst.w 12(a4)
  4472.  blt .noworkout
  4473.  
  4474.  sub.w zoff,d1
  4475.  move.w d0,d2
  4476.  muls d6,d2
  4477.  move.w d1,d3
  4478.  muls d5,d3
  4479.  sub.l d3,d2
  4480.  
  4481.  
  4482.  add.l d2,d2
  4483.  swap d2
  4484.  move.w d2,(a1)+
  4485.  
  4486.  muls d5,d0
  4487.  muls d6,d1
  4488.  add.l d0,d1
  4489.  asl.l #2,d1
  4490.  swap d1
  4491.  moveq #0,d3
  4492.  
  4493.  move.w d1,(a1)+
  4494.  ext.l d2
  4495.  asl.l #7,d2
  4496.  add.l xwobble,d2
  4497.  move.l d2,(a1)+
  4498.  sub.l xwobble,d2
  4499.  
  4500.  add.w #64,a4
  4501.  dbra d7,.objpointrotlop
  4502.  
  4503.  rts
  4504.  
  4505. .noworkout:
  4506.   move.l #0,(a1)+
  4507.   move.l #0,(a1)+
  4508.   add.w #64,a4
  4509.   dbra d7,.objpointrotlop
  4510.   rts
  4511.  
  4512. LightDraw:
  4513.  
  4514.  move.w (a0)+,d0
  4515.  move.w (a0)+,d1
  4516.  move.l #Rotated,a1
  4517.  move.w 6(a1,d0.w*8),d2
  4518.  ble.s oneendbehind
  4519.  move.w 6(a1,d1.w*8),d3
  4520.  bgt.s bothendsinfront
  4521.  
  4522. oneendbehind:
  4523.  rts
  4524. bothendsinfront:
  4525.  
  4526.  move.l #OnScreen,a2
  4527.  move.w (a2,d0.w*2),d0
  4528.  bge.s okleftend
  4529.  moveq #0,d0
  4530. okleftend:
  4531.  move.w (a2,d1.w*2),d1
  4532.  bgt.s somevis
  4533.  rts
  4534. somevis:
  4535.  cmp.w #95,d0
  4536.  ble.s somevis2
  4537.  rts
  4538. somevis2:
  4539.  cmp.w #95,d1
  4540.  ble.s okrightend
  4541.  move.w #95,d1
  4542. okrightend:
  4543.  
  4544.  sub.w d0,d1
  4545.  blt.s wrongbloodywayround
  4546.  move.l #brightentab,a4
  4547.  move.l #objintocop,a1
  4548.  lea (a1,d0.w*2),a1
  4549.  
  4550.  move.l frompt,a3
  4551.  move.w #104*4,d6
  4552.  move.w #79,d2
  4553. lacross:
  4554.  move.w d2,d3
  4555.  move.l a3,a2
  4556.  adda.w (a1)+,a2
  4557. ldown:
  4558.  add.w d6,a2
  4559.  move.w (a2),d7
  4560.  move.w (a4,d7.w*2),(a2)
  4561.  dbra d3,ldown
  4562.  dbra d1,lacross
  4563.  
  4564. wrongbloodywayround:
  4565.  
  4566.  rts
  4567.  
  4568. FaceToPlace: dc.w 0
  4569.  
  4570. Cheese:
  4571.  dc.w 4,15
  4572.  
  4573. FacesList:
  4574.  dc.w 0,4*4
  4575.  dc.w 1,2*4
  4576.  dc.w 0,2*4
  4577.  dc.w 2,2*4
  4578.  dc.w 0,2*4
  4579.  dc.w 1,3*4
  4580.  dc.w 0,2*4
  4581.  dc.w 2,3*4
  4582.  dc.w 0,5*4
  4583.  dc.w 1,2*4
  4584.  dc.w 0,2*4
  4585.  dc.w 2,2*4
  4586.  dc.w 0,2*4
  4587.  dc.w 1,2*4
  4588.  dc.w 0,2*4
  4589.  dc.w 2,3*4
  4590.  dc.w 0,1*4
  4591.  dc.w 1,3*4
  4592.  dc.w 0,1*4
  4593.  dc.w 2,3*4
  4594.  dc.w 0,1*4
  4595.  
  4596. EndOfFacesList:
  4597.  
  4598. FacesPtr:
  4599.  dc.l FacesList
  4600. FacesCounter:
  4601.  dc.w 0
  4602. Expression:
  4603.  dc.w 0
  4604.  
  4605. PlaceFace:
  4606.  
  4607.  move.w FacesCounter,d0
  4608.  subq #1,d0
  4609.  bgt.s NoNewFace
  4610.  
  4611.  move.l FacesPtr,a0
  4612.  
  4613.  move.w 2(a0),d0
  4614.  move.w (a0),Expression
  4615.  addq #4,a0
  4616.  cmp.l #EndOfFacesList,a0
  4617.  blt.s NotFirstFace
  4618.  
  4619.  move.l #FacesList,a0
  4620.  
  4621. NotFirstFace
  4622.  move.l a0,FacesPtr
  4623.  
  4624. NoNewFace:
  4625.  
  4626.  move.w d0,FacesCounter
  4627.  
  4628.  Move.w FaceToPlace,d0
  4629.  muls #5,d0
  4630.  add.w Expression,d0
  4631.  move.l #FacePlace+10,a0
  4632.  move.l #Faces,a1
  4633.  muls #(4*32*5),d0
  4634.  adda.w d0,a1
  4635.  move.w #4,d0
  4636.  move.w #24,d1
  4637.  
  4638.  move.w #4,d3
  4639. bitplaneloop:
  4640.  move.w #31,d2
  4641. PlaceFaceToPlaceInFacePlaceLoop:
  4642.  move.l (a1),(a0)
  4643.  adda.w d0,a1
  4644.  adda.w d1,a0
  4645.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4646.  dbra d3,bitplaneloop
  4647.  
  4648.  rts
  4649.  
  4650. Energy:
  4651.  dc.w 191
  4652. OldEnergy:
  4653.  dc.w 191
  4654. Ammo: dc.w 63
  4655. OldAmmo: dc.w 63
  4656.  
  4657. FullEnergy:
  4658.  move.w #127,Energy
  4659.  move.w #127,OldEnergy
  4660.  move.l #health,a0
  4661.  move.l #borders,a1
  4662.  add.l #25*8*2+6,a1
  4663.  lea 2592(a1),a2
  4664.  move.w #127,d0
  4665. PutInFull:
  4666.  move.b (a0)+,(a1)
  4667.  move.b (a0)+,8(a1)
  4668.  add.w #16,a1
  4669.  move.b (a0)+,(a2)
  4670.  move.b (a0)+,8(a2)
  4671.  add.w #16,a2
  4672.  dbra d0,PutInFull
  4673.  
  4674.  rts
  4675.  
  4676. EnergyBar:
  4677.  
  4678.  move.w Energy,d0
  4679.  bgt.s .noeneg
  4680.  move.w #0,d0
  4681. .noeneg:
  4682.  move.w d0,Energy
  4683.  
  4684.  cmp.w OldEnergy,d0
  4685.  bne.s gottochange
  4686.  
  4687. NoChange
  4688.  rts
  4689.  
  4690. gottochange:
  4691.   
  4692.  blt LessEnergy
  4693.  cmp.w #127,Energy
  4694.  blt.s NotMax
  4695.  move.w #127,Energy
  4696. NotMax:
  4697.  
  4698.  move.w Energy,d0
  4699.  move.w OldEnergy,d2
  4700.  sub.w d0,d2
  4701.  beq.s NoChange    
  4702.  neg.w d2
  4703.  
  4704.  move.w #127,d3
  4705.  sub.w d0,d3
  4706.  
  4707.  move.l #health,a0
  4708.  lea (a0,d3.w*4),a0
  4709.  move.l #borders+25*16+6,a1
  4710.  lsl.w #4,d3
  4711.  add.w d3,a1
  4712.  lea 2592(a1),a2
  4713.  
  4714. EnergyRise:
  4715.  move.b (a0)+,(a1)
  4716.  move.b (a0)+,8(a1)
  4717.  add.w #16,a1
  4718.  move.b (a0)+,(a2)
  4719.  move.b (a0)+,8(a2)
  4720.  add.w #16,a2
  4721.  subq #1,d2
  4722.  bgt.s EnergyRise
  4723.  
  4724.  move.w Energy,OldEnergy
  4725.  
  4726.  rts 
  4727.  
  4728. LessEnergy: 
  4729.  move.w OldEnergy,d2
  4730.  sub.w d0,d2
  4731.  
  4732.  move.w #127,d3
  4733.  sub.w OldEnergy,d3
  4734.  
  4735.  move.l #borders+25*16+6,a1
  4736.  asl.w #4,d3
  4737.  add.w d3,a1
  4738.  lea 2592(a1),a2
  4739.  
  4740. EnergyDrain:
  4741.  move.b #0,(a1)
  4742.  move.b #0,8(a1)
  4743.  move.b #0,(a2)
  4744.  move.b #0,8(a2)
  4745.  add.w #16,a1
  4746.  add.w #16,a2
  4747.  subq #1,d2
  4748.  bgt.s EnergyDrain
  4749.  
  4750.  move.w Energy,OldEnergy
  4751.  
  4752.  rts 
  4753.  
  4754. AmmoBar:
  4755.  
  4756.  move.w Ammo,d0
  4757.  cmp.w OldAmmo,d0
  4758.  bne.s .gottochange
  4759.  
  4760. .NoChange
  4761.  rts
  4762.  
  4763. .gottochange:
  4764.   
  4765.  blt LessAmmo
  4766.  cmp.w #63,Ammo
  4767.  blt.s .NotMax
  4768.  move.w #63,Ammo
  4769. .NotMax:
  4770.  
  4771.  move.w Ammo,d0
  4772.  move.w OldAmmo,d2
  4773.  sub.w d0,d2
  4774.  beq.s .NoChange
  4775.  neg.w d2
  4776.  
  4777.  move.w #63,d3
  4778.  sub.w d0,d3
  4779.  
  4780.  move.l #Ammunition,a0
  4781.  lea (a0,d3.w*8),a0
  4782.  move.l #borders+5184+25*16+1,a1
  4783.  lsl.w #5,d3
  4784.  add.w d3,a1
  4785.  lea 2592(a1),a2
  4786.  
  4787. AmmoRise:
  4788.  move.b (a0)+,(a1)
  4789.  move.b (a0)+,8(a1)
  4790.  add.w #16,a1
  4791.  move.b (a0)+,(a2)
  4792.  move.b (a0)+,8(a2)
  4793.  add.w #16,a2
  4794.  move.b (a0)+,(a1)
  4795.  move.b (a0)+,8(a1)
  4796.  add.w #16,a1
  4797.  move.b (a0)+,(a2)
  4798.  move.b (a0)+,8(a2)
  4799.  add.w #16,a2
  4800.  subq #1,d2
  4801.  bgt.s AmmoRise
  4802.  
  4803.  move.w Ammo,OldAmmo
  4804.  
  4805.  rts 
  4806.  
  4807.  
  4808. LessAmmo: 
  4809.  move.w OldAmmo,d2
  4810.  sub.w d0,d2
  4811.  
  4812.  move.w #63,d3
  4813.  sub.w OldAmmo,d3
  4814.  
  4815.  move.l #borders++5184+25*16+1,a1
  4816.  asl.w #5,d3
  4817.  add.w d3,a1
  4818.  lea 2592(a1),a2
  4819.  
  4820. AmmoDrain:
  4821.  move.b #0,(a1)
  4822.  move.b #0,8(a1)
  4823.  move.b #0,(a2)
  4824.  move.b #0,8(a2)
  4825.  add.w #16,a1
  4826.  add.w #16,a2
  4827.  move.b #0,(a1)
  4828.  move.b #0,8(a1)
  4829.  move.b #0,(a2)
  4830.  move.b #0,8(a2)
  4831.  add.w #16,a1
  4832.  add.w #16,a2
  4833.  subq #1,d2
  4834.  bgt.s AmmoDrain
  4835.  
  4836.  move.w Ammo,OldAmmo
  4837.  
  4838.  rts 
  4839.  
  4840. nulop:
  4841.  move.w #$0010,$dff000+intreq
  4842.  rte
  4843.  
  4844. doanything: dc.w 0
  4845.  
  4846. end:
  4847.      _break #0
  4848.     
  4849.  
  4850.  clr.b doanything
  4851.  
  4852.  move.w PLR1_energy,Energy
  4853.  cmp.b #'s',mors
  4854.  bne.s .notsl
  4855.  move.w PLR2_energy,Energy
  4856. .notsl:
  4857.  
  4858.  bsr EnergyBar
  4859.  
  4860.  move.l drawpt,d0
  4861.  move.l olddrawpt,drawpt
  4862.  move.l d0,olddrawpt
  4863.  move.l d0,$dff084
  4864.  
  4865.  
  4866.  cmp.b #'b',Prefsfile+3
  4867.  bne.s .noback
  4868.  jsr mt_end
  4869. .noback
  4870.  tst.w Energy
  4871.  bgt.s wevewon
  4872.  
  4873.  move.l #gameover,mt_data
  4874.  st UseAllChannels
  4875.  clr.b reachedend
  4876.  jsr mt_init
  4877. playgameover:
  4878.  move.l #$dff000,a6
  4879. waitfortop2:
  4880.  
  4881.     
  4882.  btst.b #0,intreqrl(a6)
  4883.  beq waitfortop2
  4884.  move.w #$1,intreq(a6)
  4885.  
  4886.     
  4887.  jsr mt_music
  4888.  
  4889.  
  4890.     
  4891.  tst.b reachedend
  4892.  beq.s playgameover
  4893.  
  4894.  bra wevelost
  4895.  
  4896.  
  4897. wevewon:
  4898.  
  4899.  cmp.b #'n',mors
  4900.  bne.s .nonextlev
  4901.  add.w #1,MAXLEVEL
  4902.  st FINISHEDLEVEL
  4903. .nonextlev:
  4904.  
  4905.  move.l #welldone,mt_data
  4906.  st UseAllChannels
  4907.  clr.b reachedend
  4908.  jsr mt_init
  4909. playwelldone:
  4910.  move.l #$dff000,a6
  4911. waitfortop3:
  4912.  btst.b #0,intreqrl(a6)
  4913.  beq waitfortop3
  4914.  move.w #$1,intreq(a6)
  4915.  
  4916.  jsr mt_music
  4917.  
  4918.  tst.b reachedend
  4919.  beq.s playwelldone
  4920.  
  4921.  cmp.w #16,MAXLEVEL
  4922.  bne .noendgame
  4923.  
  4924.  jsr docredits
  4925.  
  4926. .noendgame:
  4927.  
  4928. wevelost:
  4929.  
  4930.  PROTICHECK a0
  4931.  
  4932.  jmp closeeverything 
  4933.  
  4934. endnomusic
  4935.  clr.b doanything
  4936.  cmp.b #'b',Prefsfile+3
  4937.  bne.s .noback
  4938.  jsr mt_end
  4939. .noback
  4940. *******************************
  4941. ; cmp.b #'n',mors
  4942. ; bne.s .nonextlev
  4943. ; cmp.w #15,MAXLEVEL
  4944. ; bge.s .nonextlev
  4945. ; add.w #1,MAXLEVEL
  4946. ; st FINISHEDLEVEL
  4947. ;.nonextlev:
  4948. ******************************
  4949.  
  4950.  jmp closeeverything
  4951.  
  4952. do32:
  4953.  move.w #31,d7
  4954.  move.w #$180,d1
  4955. across:
  4956.  move.w d1,(a1)+
  4957.  move.w d1,(a3)+
  4958.  move.w #0,(a1)+ 
  4959.  move.w #0,(a3)+
  4960.  add.w #2,d1
  4961.  dbra d7,across
  4962.  rts
  4963.  
  4964. string:
  4965.     dc.b    'credits',0
  4966.  
  4967. ENDGAMESCROLL:
  4968.  
  4969.     move.l    4.w,a6
  4970.     move.l    #string,d1
  4971.     moveq    #0,d2
  4972.     moveq    #0,d3
  4973.     jsr    _LVOExecute(a6)
  4974.  
  4975. ; include "endscroll.s"
  4976.  
  4977. ***********************************
  4978.  include "ab3:source/CD32JOY"
  4979.  
  4980.  
  4981.  
  4982. *************************************
  4983. * Set left and right clip values
  4984. *************************************
  4985.  
  4986.  
  4987.  
  4988. NEWsetlclip:
  4989.  move.l #OnScreen,a1
  4990.  move.l #Rotated,a2
  4991.  move.l CONNECT_TABLE,a3
  4992.  
  4993.  move.w (a0),d0
  4994.  bge.s .notignoreleft
  4995.  
  4996. ; move.l #0,(a6)
  4997.  
  4998.  bra .leftnotoktoclip
  4999. .notignoreleft:
  5000.  
  5001.  move.w 6(a2,d0*8),d3    ; left z val
  5002.  bgt.s .leftclipinfront
  5003.  addq #2,a0
  5004.  rts
  5005.  
  5006.  tst.w 6(a2,d0*8)
  5007.  bgt.s .leftnotoktoclip
  5008. .ignoreboth:
  5009. ; move.l #0,(a6)
  5010. ; move.l #96*65536,4(a6)
  5011.  move.w #0,leftclip
  5012.  move.w #96,rightclip
  5013.  addq #8,a6
  5014.  addq #2,a0
  5015.  rts
  5016.  
  5017. .leftclipinfront:
  5018.  move.w (a1,d0*2),d1    ; left x on screen
  5019.  move.w (a0),d2
  5020.  move.w 2(a3,d2.w*4),d2
  5021.  move.w (a1,d2.w*2),d2
  5022.  cmp.w d1,d2
  5023.  bgt.s .leftnotoktoclip
  5024.  
  5025. ; move.w d1,(a6)
  5026. ; move.w d3,2(a6)
  5027.  cmp.w leftclip,d1
  5028.  ble.s .leftnotoktoclip
  5029.  move.w d1,leftclip
  5030. .leftnotoktoclip:
  5031.  
  5032.  addq #2,a0
  5033.  
  5034.  rts
  5035.  
  5036. NEWsetrclip
  5037.  move.l #OnScreen,a1
  5038.  move.l #Rotated,a2
  5039.  move.l CONNECT_TABLE,a3
  5040.  move.w (a0),d0
  5041.  bge.s .notignoreright
  5042. ; move.w #96,4(a6)
  5043. ; move.w #0,6(a6)
  5044.  move.w #0,d4
  5045.  bra .rightnotoktoclip
  5046. .notignoreright:
  5047.  move.w 6(a2,d0*8),d4    ; right z val
  5048.  bgt.s .rightclipinfront
  5049. ; move.w #96,4(a6)
  5050. ; move.w #0,6(a6)
  5051.  bra.s .rightnotoktoclip
  5052.  
  5053. .rightclipinfront:
  5054.  move.w (a1,d0*2),d1    ; right x on screen
  5055.  move.w (a0),d2
  5056.  move.w (a3,d2.w*4),d2
  5057.  move.w (a1,d2.w*2),d2
  5058.  cmp.w d1,d2
  5059.  blt.s .rightnotoktoclip
  5060. ; move.w d1,4(a6)
  5061. ; move.w d4,6(a6)
  5062.  
  5063.  cmp.w rightclip,d1
  5064.  bge.s .rightnotoktoclip
  5065.  addq #1,d1
  5066.  move.w d1,rightclip
  5067. .rightnotoktoclip:
  5068.  addq #8,a6
  5069.  addq #2,a0
  5070.  rts
  5071.  
  5072. FIRSTsetlrclip:
  5073.  move.l #OnScreen,a1
  5074.  move.l #Rotated,a2
  5075.  
  5076.  move.w (a0)+,d0
  5077.  bge.s .notignoreleft
  5078.  bra .leftnotoktoclip
  5079. .notignoreleft:
  5080.  
  5081.  move.w 6(a2,d0*8),d3    ; left z val
  5082.  bgt.s .leftclipinfront
  5083.  
  5084.  move.w (a0),d0
  5085.  blt.s .ignoreboth
  5086.  tst.w 6(a2,d0*8)
  5087.  bgt.s .leftnotoktoclip
  5088. .ignoreboth
  5089.  move.w #96,rightclip
  5090.  move.w #0,leftclip
  5091.  addq #2,a0
  5092.  rts
  5093.  
  5094. .leftclipinfront:
  5095.  move.w (a1,d0*2),d1    ; left x on screen
  5096.  cmp.w leftclip,d1
  5097.  ble.s .leftnotoktoclip
  5098.  move.w d1,leftclip
  5099. .leftnotoktoclip:
  5100.  
  5101.  move.w (a0)+,d0
  5102.  bge.s .notignoreright
  5103.  move.w #0,d4
  5104.  bra .rightnotoktoclip
  5105. .notignoreright:
  5106.  move.w 6(a2,d0*8),d4    ; right z val
  5107.  ble.s .rightnotoktoclip
  5108.  
  5109. .rightclipinfront:
  5110.  move.w (a1,d0*2),d1    ; right x on screen
  5111.  addq #1,d1
  5112.  cmp.w rightclip,d1
  5113.  bge.s .rightnotoktoclip
  5114.  move.w d1,rightclip
  5115. .rightnotoktoclip:
  5116.  
  5117. ; move.w leftclip,d0
  5118. ; move.w rightclip,d1
  5119. ; cmp.w d0,d1
  5120. ; bge.s .noswap
  5121. ; move.w #96,rightclip
  5122. ; move.w #0,leftclip
  5123. ;.noswap:
  5124.  
  5125.  rts
  5126.  
  5127.  
  5128. leftclip2: dc.w 0
  5129. rightclip2: dc.w 0
  5130. ZoneBright: dc.w 0
  5131.  
  5132. npolys: dc.w 0
  5133.  
  5134. PLR1_fire: dc.b 0
  5135. PLR2_fire: dc.b 0
  5136.  
  5137. *****************************************************
  5138.  
  5139.  
  5140. pastdata:
  5141. ***********************************
  5142. * This routine animates brightnesses.
  5143.  
  5144.  
  5145. liftpt: dc.l liftanimtab
  5146.  
  5147. brightpt:
  5148.  dc.l brightanimtab
  5149.  
  5150.  
  5151. liftanim:
  5152.  rts
  5153.  
  5154. ******************************
  5155.  include "ab3:source/ObjectMove"
  5156.  include "ab3:source/Anims"
  5157. ******************************
  5158. startpass:
  5159. ; include "ab3:source/password_reloc.s"
  5160. endpass:
  5161.  
  5162. rotanimpt: dc.w 0
  5163. xradd: dc.w 5
  5164. yradd: dc.w 8
  5165. xrpos: dc.w 320
  5166. yrpos: dc.w 320
  5167.  
  5168. rotanim:
  5169.  rts
  5170.  
  5171. option:
  5172.  dc.l 0,0
  5173.  
  5174. ********** WALL STUFF *******************************
  5175.  
  5176.  include "AB3:source/wallroutine3.chipmem"
  5177.  
  5178. *****************************************************
  5179.  
  5180. ******************************************
  5181. * floor polygon
  5182.  
  5183. numsidestd: dc.w 0
  5184. bottomline: dc.w 0
  5185.  
  5186. checkforwater:
  5187.  tst.b usewater
  5188.  beq.s .notwater
  5189.  
  5190.  move.l Roompt,a1
  5191.  move.w (a1),d7
  5192.  cmp.w currzone,d7
  5193.  bne.s .notwater
  5194.  
  5195.  move.b #$f,fillscrnwater
  5196.  
  5197. .notwater:
  5198.  move.w (a0)+,d6    ; sides-1
  5199.  add.w d6,d6
  5200.  add.w d6,a0
  5201.  add.w #4+6,a0
  5202.  rts
  5203.  
  5204.  rts
  5205.  
  5206. NewCornerBuff:
  5207.  ds.l 100
  5208. CLRNOFLOOR: dc.w 0
  5209.  
  5210. itsafloordraw:
  5211.  
  5212. * If D0 =1 then its a floor otherwise (=2) it's
  5213. * a roof.
  5214.  
  5215.  move.w #0,above
  5216.  move.w (a0)+,d6    ; ypos of poly
  5217.  
  5218.  move.w d6,d7
  5219.  ext.l d7
  5220.  asl.l #6,d7
  5221.  cmp.l TOPOFROOM,d7
  5222.  blt checkforwater
  5223.  cmp.l BOTOFROOM,d7
  5224.  bgt.s dontdrawreturn
  5225.  
  5226.  move.w leftclip(pc),d7
  5227.  cmp.w rightclip(pc),d7
  5228.  bge.s dontdrawreturn
  5229.  
  5230.  move.w botclip,d7
  5231.  sub.w #40,d7
  5232.  ble.s dontdrawreturn
  5233.  sub.w flooryoff,d6
  5234.  bgt.s below
  5235.  blt.s aboveplayer
  5236.  
  5237.  tst.b usewater
  5238.  beq.s .notwater
  5239.  
  5240.  move.l Roompt,a1
  5241.  move.w (a1),d7
  5242.  cmp.w currzone,d7
  5243.  
  5244.  bne.s .notwater
  5245.  
  5246.  st fillscrnwater
  5247.  
  5248. .notwater:
  5249.  
  5250.  
  5251. dontdrawreturn:
  5252.  move.w (a0)+,d6    ; sides-1
  5253.  add.w d6,d6
  5254.  add.w d6,a0
  5255.  add.w #4+6,a0
  5256.  rts
  5257. aboveplayer:
  5258.  
  5259.  tst.b usewater
  5260.  beq.s .notwater
  5261.  
  5262.  move.l Roompt,a1
  5263.  move.w (a1),d7
  5264.  cmp.w currzone,d7
  5265.  bne.s .notwater
  5266.  
  5267.  move.b #$f,fillscrnwater
  5268.  
  5269. .notwater:
  5270.  
  5271.  btst #1,d0
  5272.  beq.s dontdrawreturn
  5273.  move.w #40,d7
  5274.  sub.w topclip,d7 
  5275.  ble.s dontdrawreturn
  5276.  move.w #1,d0
  5277.  move.w d0,above
  5278.  neg.w d6
  5279. below:
  5280.  btst #0,d0
  5281.  beq.s dontdrawreturn
  5282.  move.w d6,distaddr
  5283.  muls #64,d6
  5284.  move.l d6,ypos
  5285.  divs d7,d6        ; zpos of bottom
  5286.             ; visible line
  5287.  move.w d6,minz
  5288.  move.w d7,bottomline
  5289.  
  5290. ; Go round each point finding out
  5291. ; if it should be visible or not.
  5292.  
  5293.  move.l a0,-(a7)
  5294.  
  5295.  move.w (a0)+,d7    ; number of sides
  5296.  move.l #Rotated,a1
  5297.  move.l #OnScreen,a2
  5298.  move.l #NewCornerBuff,a3
  5299.  moveq #0,d4
  5300.  moveq #0,d5
  5301.  moveq #0,d6
  5302.  clr.b anyclipping
  5303.  
  5304. cornerprocessloop:
  5305.  
  5306.  move.w (a0)+,d0
  5307.  move.w 6(a1,d0.w*8),d1
  5308.  ble  .canttell
  5309.  
  5310.  move.w (a2,d0.w*2),d3
  5311.  cmp.w leftclip,d3
  5312.  bgt.s .nol
  5313.  st d4
  5314.  st anyclipping
  5315.  bra.s .nos
  5316. .nol:
  5317.  cmp.w rightclip,d3
  5318.  blt.s .nor
  5319.  st d6
  5320.  st anyclipping
  5321.  bra.s .nos
  5322. .nor:
  5323.  st d5
  5324. .nos:
  5325.  bra .cantell
  5326.  
  5327. .canttell:
  5328.  st d5
  5329.  st anyclipping
  5330.  
  5331. .cantell:
  5332.  
  5333.  
  5334.  dbra d7,cornerprocessloop
  5335.  
  5336.  move.l (a7)+,a0
  5337.  tst.b d5
  5338.  bne.s somefloortodraw
  5339.  eor.b d4,d6
  5340.  bne dontdrawreturn
  5341.  
  5342. somefloortodraw:
  5343.  
  5344.  tst.b gourfloor
  5345.  bne goursides
  5346.  
  5347.  move.w #80,top
  5348.  move.w #-1,bottom
  5349.  move.w #0,drawit
  5350.  move.l #Rotated,a1
  5351.  move.l #OnScreen,a2
  5352.  move.w (a0)+,d7    ; no of sides
  5353. sideloop:
  5354.  move.w minz,d6
  5355.  move.w (a0)+,d1
  5356.  move.w (a0),d3
  5357.  move.w 6(a1,d1*8),d4    ;first z
  5358.  cmp.w d6,d4
  5359.  bgt firstinfront
  5360.  move.w 6(a1,d3*8),d5    ; sec z
  5361.  cmp.w d6,d5
  5362.  ble bothbehind
  5363. ** line must be on left and partially behind.
  5364.  sub.w d5,d4
  5365.  move.l (a1,d1*8),d0
  5366.  sub.l (a1,d3*8),d0
  5367.  asr.l #7,d0
  5368.  sub.w d5,d6
  5369.  muls d6,d0    ; new x coord
  5370.  divs d4,d0
  5371.  ext.l d0
  5372.  asl.l #7,d0
  5373.  
  5374.  add.l (a1,d3*8),d0
  5375.  move.w minz,d4
  5376.  move.w (a2,d3*2),d2
  5377.  divs d4,d0
  5378.  add.w #47,d0
  5379.  move.l ypos,d3
  5380.  divs d5,d3
  5381.  move.w bottomline,d1 
  5382.  bra lineclipped
  5383.  
  5384. firstinfront:
  5385.  move.w 6(a1,d3*8),d5    ; sec z
  5386.  cmp.w d6,d5
  5387.  bgt bothinfront
  5388. ** line must be on right and partially behind.
  5389.  sub.w d4,d5    ; dz
  5390.  move.l (a1,d3*8),d2
  5391.  sub.l (a1,d1*8),d2    ; dx
  5392.  sub.w d4,d6
  5393.  asr.l #7,d2
  5394.  muls d6,d2    ; new x coord
  5395.  divs d5,d2
  5396.  ext.l d2
  5397.  asl.l #7,d2
  5398.  add.l (a1,d1*8),d2
  5399.  move.w minz,d5
  5400.  move.w (a2,d1*2),d0
  5401.  divs d5,d2
  5402.  add.w #47,d2
  5403.  move.l ypos,d1
  5404.  divs d4,d1
  5405.  move.w bottomline,d3 
  5406.  bra lineclipped
  5407.  
  5408. bothinfront:
  5409.  
  5410. * Also, usefully enough, both are on-screen
  5411. * so no bottom clipping is needed.
  5412.  
  5413.  move.w (a2,d1*2),d0    ; first x
  5414.  move.w (a2,d3*2),d2    ; second x
  5415.  move.l ypos,d1
  5416.  move.l d1,d3
  5417.  divs d4,d1        ; first y
  5418.  divs d5,d3        ; second y
  5419. lineclipped:
  5420.  move.l #rightsidetab,a3
  5421.  cmp.w d1,d3
  5422.  beq lineflat
  5423.  st drawit
  5424.  bgt lineonright
  5425.  move.l #leftsidetab,a3
  5426.  exg d1,d3
  5427.  exg d0,d2
  5428.  
  5429.  lea (a3,d1*2),a3
  5430.  
  5431.  cmp.w top(pc),d1
  5432.  bge.s .nonewtop
  5433.  move.w d1,top
  5434. .nonewtop:
  5435.  cmp.w bottom(pc),d3
  5436.  ble.s .nonewbot
  5437.  move.w d3,bottom
  5438. .nonewbot:
  5439.  
  5440.  sub.w d1,d3    ; dy
  5441.  sub.w d0,d2    ; dx
  5442.  
  5443.  blt .linegoingleft
  5444.  sub.w #1,d0
  5445.  
  5446.  ext.l d2
  5447.  divs d3,d2
  5448.  move.w d2,d6
  5449.  swap d2
  5450.  
  5451. ; moveq #0,d6
  5452. ; sub.w d3,d2
  5453. ; blt.s .noco
  5454. ;.makeco
  5455. ; addq #1,d6
  5456. ; sub.w d3,d2
  5457. ; bge.s .makeco
  5458. ;.noco
  5459. ; add.w d3,d2
  5460.  
  5461.  move.w d3,d4
  5462.  move.w d3,d5
  5463.  subq #1,d5
  5464.  move.w d6,d1
  5465.  addq #1,d1
  5466.  
  5467. .pixlopright:
  5468.  move.w d0,(a3)+
  5469.  sub.w d2,d4
  5470.  bge.s .nobigstep
  5471.  add.w d1,d0
  5472.  add.w d3,d4
  5473.  dbra d5,.pixlopright
  5474.  bra lineflat
  5475. .nobigstep
  5476.  add.w d6,d0
  5477.  dbra d5,.pixlopright
  5478.  bra lineflat
  5479.  
  5480. .linegoingleft:
  5481.  
  5482.  sub.w #1,d0
  5483.  
  5484.  neg.w d2
  5485.  
  5486.  ext.l d2
  5487.  divs d3,d2
  5488.  move.w d2,d6
  5489.  swap d2
  5490.  
  5491.  
  5492. ; moveq #0,d6
  5493. ; sub.w d3,d2
  5494. ; blt.s .nocol
  5495. ;.makecol
  5496. ; addq #1,d6
  5497. ; sub.w d3,d2
  5498. ; bge.s .makecol
  5499. ;.nocol
  5500. ; add.w d3,d2
  5501.  
  5502.  
  5503.  
  5504.  move.w d3,d4
  5505.  move.w d3,d5
  5506.  subq #1,d5
  5507.  
  5508.  move.w d6,d1
  5509.  addq #1,d1
  5510.  
  5511. .pixlopleft:
  5512.  sub.w d2,d4
  5513.  bge.s .nobigstepl
  5514.  sub.w d1,d0
  5515.  add.w d3,d4
  5516.  move.w d0,(a3)+
  5517.  dbra d5,.pixlopleft
  5518.  bra lineflat
  5519.  
  5520. .nobigstepl
  5521.  sub.w d6,d0
  5522.  move.w d0,(a3)+
  5523.  dbra d5,.pixlopleft
  5524.  bra lineflat
  5525.  
  5526. lineonright:
  5527.  
  5528.  lea (a3,d1*2),a3
  5529.  
  5530.  cmp.w top(pc),d1
  5531.  bge.s .nonewtop
  5532.  move.w d1,top
  5533. .nonewtop:
  5534.  cmp.w bottom(pc),d3
  5535.  ble.s .nonewbot
  5536.  move.w d3,bottom
  5537. .nonewbot:
  5538.  
  5539.  sub.w d1,d3    ; dy
  5540.  sub.w d0,d2    ; dx
  5541.  blt .linegoingleft
  5542. ; addq #1,d0
  5543.  ext.l d2
  5544.  divs d3,d2
  5545.  move.w d2,d6
  5546.  swap d2
  5547.  
  5548. ; moveq #0,d6
  5549. ; sub.w d3,d2
  5550. ; blt.s .noco
  5551. ;.makeco
  5552. ; addq #1,d6
  5553. ; sub.w d3,d2
  5554. ; bge.s .makeco
  5555. ;.noco
  5556. ; add.w d3,d2
  5557.  
  5558.  move.w d3,d4
  5559.  move.w d3,d5
  5560.  subq #1,d5
  5561.  move.w d6,d1
  5562.  addq #1,d1
  5563.  
  5564. .pixlopright:
  5565.  sub.w d2,d4
  5566.  bge.s .nobigstep
  5567.  add.w d1,d0
  5568.  add.w d3,d4
  5569.  move.w d0,(a3)+
  5570.  dbra d5,.pixlopright
  5571.  bra lineflat
  5572.  
  5573. .nobigstep
  5574.  add.w d6,d0
  5575.  move.w d0,(a3)+
  5576.  dbra d5,.pixlopright
  5577.  bra lineflat
  5578.  
  5579. .linegoingleft:
  5580. ; addq #1,d0
  5581.  neg.w d2
  5582.  
  5583.  ext.l d2
  5584.  divs d3,d2
  5585.  move.w d2,d6
  5586.  swap d2
  5587.  
  5588.  
  5589. ; moveq #0,d6
  5590. ; sub.w d3,d2
  5591. ; blt.s .nocol
  5592. ;.makecol
  5593. ; addq #1,d6
  5594. ; sub.w d3,d2
  5595. ; bge.s .makecol
  5596. ;.nocol
  5597. ; add.w d3,d2
  5598.  
  5599.  move.w d3,d4
  5600.  move.w d3,d5
  5601.  subq #1,d5
  5602.  move.w d6,d1
  5603.  addq #1,d1
  5604.  
  5605. .pixlopleft:
  5606.  move.w d0,(a3)+
  5607.  sub.w d2,d4
  5608.  bge.s .nobigstepl
  5609.  sub.w d1,d0
  5610.  add.w d3,d4
  5611.  dbra d5,.pixlopleft
  5612.  bra lineflat
  5613.  
  5614. .nobigstepl
  5615.  sub.w d6,d0
  5616.  dbra d5,.pixlopleft
  5617.  
  5618. lineflat:
  5619.  
  5620. bothbehind:
  5621.  dbra d7,sideloop
  5622.  bra pastsides
  5623.  
  5624. fbr: dc.w 0
  5625. sbr: dc.w 0
  5626.  
  5627. goursides:
  5628.  
  5629.  move.w #80,top
  5630.  move.w #-1,bottom
  5631.  move.w #0,drawit
  5632.  move.l #Rotated,a1
  5633.  move.l #OnScreen,a2
  5634.  move.w (a0)+,d7    ; no of sides
  5635. sideloopGOUR:
  5636.  move.w minz,d6
  5637.  move.w (a0)+,d1
  5638.  move.w (a0),d3
  5639.  
  5640.  move.l PointBrightsPtr,a4
  5641.  move.w (a4,d1.w*4),fbr
  5642.  move.w (a4,d3.w*4),sbr
  5643.  
  5644.  move.w 6(a1,d1*8),d4    ;first z
  5645.  cmp.w d6,d4
  5646.  bgt firstinfrontGOUR
  5647.  move.w 6(a1,d3*8),d5    ; sec z
  5648.  cmp.w d6,d5
  5649.  ble bothbehindGOUR
  5650. ** line must be on left and partially behind.
  5651.  sub.w d5,d4
  5652.  
  5653.  move.w fbr,d0
  5654.  sub.w sbr,d0
  5655.  sub.w d5,d6
  5656.  muls d6,d0
  5657.  divs d4,d0
  5658.  add.w sbr,d0
  5659.  move.w d0,fbr
  5660.  
  5661.  move.l (a1,d1*8),d0
  5662.  sub.l (a1,d3*8),d0
  5663.  asr.l #7,d0
  5664.  muls d6,d0    ; new x coord
  5665.  divs d4,d0
  5666.  ext.l d0
  5667.  asl.l #7,d0
  5668.  
  5669.  add.l (a1,d3*8),d0
  5670.  move.w minz,d4
  5671.  move.w (a2,d3*2),d2
  5672.  divs d4,d0
  5673.  add.w #47,d0
  5674.  move.l ypos,d3
  5675.  divs d5,d3
  5676.  
  5677.  move.w bottomline,d1 
  5678.  bra lineclippedGOUR
  5679.  
  5680. firstinfrontGOUR:
  5681.  move.w 6(a1,d3*8),d5    ; sec z
  5682.  cmp.w d6,d5
  5683.  bgt bothinfrontGOUR
  5684. ** line must be on right and partially behind.
  5685.  sub.w d4,d5    ; dz
  5686.  
  5687.  move.w sbr,d2
  5688.  sub.w fbr,d2
  5689.  sub.w d4,d6
  5690.  muls d6,d2
  5691.  divs d5,d2
  5692.  add.w fbr,d2
  5693.  move.w d2,sbr
  5694.  
  5695.  move.l (a1,d3*8),d2
  5696.  sub.l (a1,d1*8),d2    ; dx
  5697.  asr.l #7,d2
  5698.  muls d6,d2    ; new x coord
  5699.  divs d5,d2
  5700.  ext.l d2
  5701.  asl.l #7,d2
  5702.  add.l (a1,d1*8),d2
  5703.  move.w minz,d5
  5704.  move.w (a2,d1*2),d0
  5705.  divs d5,d2
  5706.  add.w #47,d2
  5707.  move.l ypos,d1
  5708.  divs d4,d1
  5709.  move.w bottomline,d3 
  5710.  bra lineclippedGOUR
  5711.  
  5712. bothinfrontGOUR:
  5713.  
  5714. * Also, usefully enough, both are on-screen
  5715. * so no bottom clipping is needed.
  5716.  
  5717.  move.w (a2,d1*2),d0    ; first x
  5718.  move.w (a2,d3*2),d2    ; second x
  5719.  move.l ypos,d1
  5720.  move.l d1,d3
  5721.  divs d4,d1        ; first y
  5722.  divs d5,d3        ; second y
  5723. lineclippedGOUR:
  5724.  move.l #rightsidetab,a3
  5725.  cmp.w d1,d3
  5726.  bne linenotflatGOUR
  5727.  
  5728. ; move.w fbr,d4
  5729. ; move.w sbr,d5
  5730. ; cmp.w d0,d2
  5731. ; bgt.s .nsw
  5732. ; exg d4,d5
  5733. ;.nsw:
  5734.  
  5735. ; move.l #leftbrighttab,a3
  5736. ; move.w d4,(a3,d3.w)
  5737. ; move.l #rightbrighttab,a3
  5738. ; move.w d5,(a3,d3.w) 
  5739.  bra lineflatGOUR
  5740.  
  5741. linenotflatGOUR
  5742.  st drawit
  5743.  bgt lineonrightGOUR
  5744.  move.l #leftsidetab,a3
  5745.  exg d1,d3
  5746.  exg d0,d2
  5747.  
  5748.  lea (a3,d1*2),a3
  5749.  lea leftbrighttab-leftsidetab(a3),a4
  5750.  
  5751.  cmp.w top(pc),d1
  5752.  bge.s .nonewtop
  5753.  move.w d1,top
  5754. .nonewtop:
  5755.  cmp.w bottom(pc),d3
  5756.  ble.s .nonewbot
  5757.  move.w d3,bottom
  5758. .nonewbot:
  5759.  
  5760.  sub.w d1,d3    ; dy
  5761.  sub.w d0,d2    ; dx
  5762.  
  5763.  blt .linegoingleft
  5764.  sub.w #1,d0
  5765.  
  5766.  ext.l d2
  5767.  divs d3,d2
  5768.  move.w d2,d6
  5769.  swap d2
  5770.  move.w d2,a5
  5771.  
  5772. ; moveq #0,d6
  5773. ; sub.w d3,d2
  5774. ; blt.s .noco
  5775. ;.makeco
  5776. ; addq #1,d6
  5777. ; sub.w d3,d2
  5778. ; bge.s .makeco
  5779. ;.noco
  5780. ; add.w d3,d2
  5781.  
  5782.  move.w d3,d4
  5783.  move.w d3,d5
  5784.  subq #1,d5
  5785.  move.w d6,d1
  5786.  addq #1,d1
  5787.  move.w d1,a6
  5788.  
  5789.  moveq #0,d1
  5790.  move.w sbr,d1
  5791.  move.w fbr,d2
  5792.  sub.w d1,d2
  5793.  ext.l d2
  5794.  asl.w #8,d2
  5795.  asl.w #3,d2
  5796.  divs d3,d2 
  5797.  ext.l d2
  5798.  asl.l #5,d2
  5799.  swap d1
  5800.  
  5801. .pixlopright:
  5802.  move.w d0,(a3)+
  5803.  swap d1
  5804.  move.w d1,(a4)+
  5805.  swap d1
  5806.  add.l d2,d1
  5807.  
  5808.  sub.w a5,d4
  5809.  bge.s .nobigstep
  5810.  add.w a6,d0
  5811.  add.w d3,d4
  5812.  dbra d5,.pixlopright
  5813.  bra lineflatGOUR
  5814. .nobigstep
  5815.  
  5816.  add.w d6,d0
  5817.  dbra d5,.pixlopright
  5818.  bra lineflatGOUR
  5819.  
  5820. .linegoingleft:
  5821.  
  5822.  sub.w #1,d0
  5823.  
  5824.  neg.w d2
  5825.  
  5826.  ext.l d2
  5827.  divs d3,d2
  5828.  move.w d2,d6
  5829.  swap d2
  5830.  
  5831.  
  5832. ; moveq #0,d6
  5833. ; sub.w d3,d2
  5834. ; blt.s .nocol
  5835. ;.makecol
  5836. ; addq #1,d6
  5837. ; sub.w d3,d2
  5838. ; bge.s .makecol
  5839. ;.nocol
  5840. ; add.w d3,d2
  5841.  
  5842.  move.w d3,d4
  5843.  move.w d3,d5
  5844.  subq #1,d5
  5845.  
  5846.  move.w d6,d1
  5847.  addq #1,d1
  5848.  move.w d1,a6
  5849.  move.w d2,a5
  5850.  
  5851.  moveq #0,d1
  5852.  move.w sbr,d1
  5853.  move.w fbr,d2
  5854.  sub.w d1,d2
  5855.  ext.l d2
  5856.  asl.w #8,d2
  5857.  asl.w #3,d2
  5858.  divs d3,d2 
  5859.  ext.l d2
  5860.  asl.l #5,d2
  5861.  swap d1
  5862.  
  5863. .pixlopleft:
  5864.  
  5865.  swap d1
  5866.  move.w d1,(a4)+
  5867.  swap d1
  5868.  add.l d2,d1
  5869.  
  5870.  sub.w a5,d4
  5871.  bge.s .nobigstepl
  5872.  sub.w a6,d0
  5873.  add.w d3,d4
  5874.  move.w d0,(a3)+
  5875.  dbra d5,.pixlopleft
  5876.  bra lineflatGOUR
  5877.  
  5878. .nobigstepl
  5879.  sub.w d6,d0
  5880.  move.w d0,(a3)+
  5881.  dbra d5,.pixlopleft
  5882.  bra lineflatGOUR
  5883.  
  5884. lineonrightGOUR:
  5885.  
  5886.  lea (a3,d1*2),a3
  5887.  
  5888.  lea rightbrighttab-rightsidetab(a3),a4
  5889.  
  5890.  cmp.w top(pc),d1
  5891.  bge.s .nonewtop
  5892.  move.w d1,top
  5893. .nonewtop:
  5894.  cmp.w bottom(pc),d3
  5895.  ble.s .nonewbot
  5896.  move.w d3,bottom
  5897. .nonewbot:
  5898.  
  5899.  sub.w d1,d3    ; dy
  5900.  sub.w d0,d2    ; dx
  5901.  blt .linegoingleft
  5902. ; addq #1,d0
  5903.  ext.l d2
  5904.  divs d3,d2
  5905.  move.w d2,d6
  5906.  swap d2
  5907.  
  5908. ; moveq #0,d6
  5909. ; sub.w d3,d2
  5910. ; blt.s .noco
  5911. ;.makeco
  5912. ; addq #1,d6
  5913. ; sub.w d3,d2
  5914. ; bge.s .makeco
  5915. ;.noco
  5916. ; add.w d3,d2
  5917.  
  5918.  move.w d3,d4
  5919.  move.w d3,d5
  5920.  subq #1,d5
  5921.  move.w d6,d1
  5922.  addq #1,d1
  5923.  
  5924.  move.w d1,a6
  5925.  move.w d2,a5
  5926.  
  5927.  moveq #0,d1
  5928.  move.w fbr,d1
  5929.  move.w sbr,d2
  5930.  sub.w d1,d2
  5931.  ext.l d2
  5932.  asl.w #8,d2
  5933.  asl.w #3,d2
  5934.  divs d3,d2 
  5935.  ext.l d2
  5936.  asl.l #5,d2
  5937.  swap d1
  5938.  
  5939. .pixlopright:
  5940.  
  5941.  swap d1
  5942.  move.w d1,(a4)+
  5943.  swap d1
  5944.  add.l d2,d1
  5945.  
  5946.  sub.w a5,d4
  5947.  bge.s .nobigstep
  5948.  add.w a6,d0
  5949.  add.w d3,d4
  5950.  move.w d0,(a3)+
  5951.  dbra d5,.pixlopright
  5952.  bra lineflatGOUR
  5953.  
  5954. .nobigstep
  5955.  add.w d6,d0
  5956.  move.w d0,(a3)+
  5957.  dbra d5,.pixlopright
  5958.  bra lineflatGOUR
  5959.  
  5960. .linegoingleft:
  5961. ; addq #1,d0
  5962.  neg.w d2
  5963.  
  5964.  ext.l d2
  5965.  divs d3,d2
  5966.  move.w d2,d6
  5967.  swap d2
  5968.  
  5969.  
  5970. ; moveq #0,d6
  5971. ; sub.w d3,d2
  5972. ; blt.s .nocol
  5973. ;.makecol
  5974. ; addq #1,d6
  5975. ; sub.w d3,d2
  5976. ; bge.s .makecol
  5977. ;.nocol
  5978. ; add.w d3,d2
  5979.  
  5980.  move.w d3,d4
  5981.  move.w d3,d5
  5982.  subq #1,d5
  5983.  move.w d6,d1
  5984.  addq #1,d1
  5985.  move.w d1,a6
  5986.  move.w d2,a5
  5987.  
  5988.  moveq #0,d1
  5989.  move.w fbr,d1
  5990.  move.w sbr,d2
  5991.  sub.w d1,d2
  5992.  ext.l d2
  5993.  asl.w #8,d2
  5994.  asl.w #3,d2
  5995.  divs d3,d2 
  5996.  ext.l d2
  5997.  asl.l #5,d2
  5998.  swap d1
  5999.  
  6000. .pixlopleft:
  6001.  
  6002.  swap d1
  6003.  move.w d1,(a4)+
  6004.  swap d1
  6005.  add.l d2,d1
  6006.  
  6007.  move.w d0,(a3)+
  6008.  sub.w a5,d4
  6009.  bge.s .nobigstepl
  6010.  sub.w a6,d0
  6011.  add.w d3,d4
  6012.  dbra d5,.pixlopleft
  6013.  bra lineflatGOUR
  6014.  
  6015. .nobigstepl
  6016.  sub.w d6,d0
  6017.  dbra d5,.pixlopleft
  6018.  
  6019. lineflatGOUR:
  6020.  
  6021. bothbehindGOUR:
  6022.  dbra d7,sideloopGOUR
  6023.  
  6024. pastsides:
  6025.  
  6026.  
  6027.  addq #2,a0
  6028.  
  6029.  move.w #104*4,linedir
  6030.  move.l frompt,a6
  6031.  add.l #104*4*41,a6
  6032.  move.w (a0)+,scaleval
  6033.  move.w (a0)+,whichtile
  6034.  move.w (a0)+,d6
  6035.  add.w ZoneBright,d6
  6036.  move.w d6,lighttype
  6037.  move.w above(pc),d6
  6038.  beq groundfloor
  6039. * on ceiling:
  6040.  move.w #-104*4,linedir
  6041.  suba.w #104*4,a6
  6042. groundfloor:
  6043.  
  6044.  move.w xoff,d6
  6045.  move.w zoff,d7
  6046.  add.w xwobxoff,d7
  6047.  add.w xwobzoff,d6
  6048.  swap d6
  6049.  swap d7
  6050.  clr.w d6
  6051.  clr.w d7
  6052.  move.w scaleval(pc),d3
  6053.  beq.s .samescale
  6054.  bgt.s .scaledown
  6055.  neg.w d3
  6056.  asr.l d3,d7
  6057.  asr.l d3,d6
  6058.  bra.s .samescale
  6059. .scaledown:
  6060.  asl.l d3,d6
  6061.  asl.l d3,d7
  6062. .samescale
  6063.  move.l d6,sxoff
  6064.  move.l d7,szoff
  6065.  bra pastscale 
  6066.  
  6067.  asr.l #3,d1
  6068.  asr.l #3,d2
  6069.  asr.l #2,d1
  6070.  asr.l #2,d2
  6071.  asr.l #1,d1
  6072.  asr.l #1,d2
  6073. scaleprogfrom
  6074.  nop
  6075.  nop
  6076.  asl.l #1,d1
  6077.  asl.l #1,d2
  6078.  asl.l #2,d1
  6079.  asl.l #2,d2
  6080.  asl.l #3,d1
  6081.  asl.l #3,d2
  6082.  
  6083. top: dc.w 0
  6084. bottom: dc.w 0
  6085. ypos: dc.l 0
  6086. nfloors: dc.w 0
  6087. lighttype: dc.w 0
  6088. above: dc.w 0 
  6089. linedir: dc.w 0
  6090. distaddr: dc.w 0
  6091.  
  6092. minz: dc.w 0
  6093. leftsidetab:
  6094.  ds.w 180
  6095. rightsidetab:
  6096.  ds.w 180
  6097. leftbrighttab:
  6098.  ds.w 180
  6099. rightbrighttab:
  6100.  ds.w 180
  6101.  
  6102. PointBrights:
  6103.  dc.l 0
  6104. CurrentPointBrights:
  6105.  ds.l 1000
  6106.  
  6107. movespd: dc.w 0
  6108. largespd: dc.l 0
  6109. disttobot: dc.w 0
  6110.  
  6111. pastscale:
  6112.  
  6113.  tst.b drawit(pc)
  6114.  beq dontdrawfloor
  6115.  
  6116.  move.l a0,-(a7)
  6117.  
  6118.  move.l #leftsidetab,a4
  6119.  move.w top(pc),d1
  6120.  
  6121.  move.w #39,d7
  6122.  sub.w d1,d7
  6123.  move.w d7,disttobot
  6124.  
  6125.  move.w bottom(pc),d7
  6126.  tst.w above
  6127.  beq.s clipfloor
  6128.  
  6129.  move.w #40,d3
  6130.  move.w d3,d4
  6131.  sub.w topclip,d3
  6132.  sub.w botclip,d4
  6133.  cmp.w d3,d1
  6134.  bge predontdrawfloor
  6135.  cmp.w d4,d7
  6136.  blt predontdrawfloor
  6137.  cmp.w d4,d1
  6138.  bge.s .nocliptoproof
  6139.  move.w d4,d1
  6140. .nocliptoproof
  6141.  cmp.w d3,d7
  6142.  blt doneclip
  6143.  move.w d3,d7
  6144.  bra doneclip
  6145.  
  6146. clipfloor:
  6147.  move.w botclip,d4
  6148.  sub.w #40,d4
  6149.  cmp.w d4,d1
  6150.  bge predontdrawfloor
  6151.  move.w topclip,d3
  6152.  sub.w #40,d3
  6153.  cmp.w d3,d1
  6154.  bge.s .nocliptopfloor
  6155.  move.w d3,d1
  6156. .nocliptopfloor 
  6157.  cmp.w d3,d7
  6158.  ble predontdrawfloor
  6159.  cmp.w d4,d7
  6160.  blt.s .noclipbotfloor
  6161.  move.w d4,d7
  6162. .noclipbotfloor:
  6163.  
  6164. doneclip:
  6165.  
  6166.  lea (a4,d1*2),a4
  6167. ; move.l #dists,a2
  6168.  move.w distaddr,d0
  6169.  muls #64,d0
  6170.  move.l d0,a2
  6171. ; muls #25,d0
  6172. ; adda.w d0,a2
  6173. ; lea (a2,d1*2),a2
  6174.  sub.w d1,d7
  6175.  ble predontdrawfloor 
  6176.  move.w d1,d0
  6177.  bne.s .notzero
  6178.  moveq #1,d0
  6179. .notzero
  6180.  muls linedir,d1
  6181.  add.l d1,a6
  6182.  move.l #floorscalecols,a1
  6183.  move.l LineToUse,a5
  6184.  
  6185.  tst.b gourfloor
  6186.  bne dogourfloor
  6187.  
  6188.  tst.b anyclipping
  6189.  beq dofloornoclip
  6190.  
  6191. dofloor:
  6192. ; move.w (a2)+,d0
  6193.  move.w leftclip(pc),d3
  6194.  move.w rightclip(pc),d4
  6195.  move.w rightsidetab-leftsidetab(a4),d2
  6196.  
  6197.  addq #1,d2
  6198.  cmp.w d3,d2
  6199.  ble.s nodrawline
  6200.  cmp.w d4,d2
  6201.  ble.s noclipright
  6202.  move.w d4,d2
  6203. noclipright:
  6204.  move.w (a4),d1
  6205.  cmp.w d4,d1
  6206.  bge.s nodrawline
  6207.  cmp.w d3,d1
  6208.  bge.s noclipleft
  6209.  move.w d3,d1
  6210. noclipleft:
  6211.  cmp.w d1,d2
  6212.  ble.s nodrawline
  6213.  
  6214.  move.w d1,leftedge
  6215.  move.w d2,rightedge
  6216.  
  6217. ; moveq #0,d1
  6218. ; moveq #0,d3
  6219. ; move.w leftbrighttab-leftsidetab(a4),d1
  6220. ; bge.s .okbl
  6221. ; moveq #0,d1
  6222. ;.okbl:
  6223.  
  6224. ; move.w rightbrighttab-leftsidetab(a4),d3
  6225. ; bge.s .okbr
  6226. ; moveq #0,d3
  6227. ;.okbr:
  6228.  
  6229. ; sub.w d1,d3
  6230. ; asl.w #8,d1
  6231. ; move.l d1,leftbright
  6232. ; swap d3
  6233. ; asr.l #5,d3
  6234. ; divs d5,d3
  6235. ; move.w d3,d5
  6236. ; muls.w d6,d5
  6237. ; asr.l #3,d5
  6238. ; clr.b d5
  6239. ; add.w d5,leftbright+2
  6240.  
  6241. ; ext.l d3
  6242. ; asl.l #5,d3
  6243. ; swap d3
  6244. ; asl.w #8,d3
  6245. ; move.l d3,brightspd
  6246.  
  6247.  move.l a6,a3
  6248.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6249.  move.l a2,d7
  6250.  divs d0,d7
  6251.  move.w d7,d0
  6252.  jsr (a5)
  6253.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6254. nodrawline
  6255.  sub.w #1,disttobot
  6256.  adda.w linedir(pc),a6
  6257.  addq #2,a4
  6258.  addq #1,d0
  6259.  subq #1,d7
  6260.  bgt dofloor
  6261.  
  6262. predontdrawfloor
  6263.  move.l (a7)+,a0
  6264.  
  6265. dontdrawfloor:
  6266.  
  6267.  rts
  6268.  
  6269. anyclipping: dc.w 0
  6270.  
  6271. dofloornoclip:
  6272. ; move.w (a2)+,d0
  6273.  move.w rightsidetab-leftsidetab(a4),d2
  6274.  addq #1,d2
  6275.  move.w (a4)+,d1
  6276.  move.w d1,leftedge
  6277.  move.w d2,rightedge
  6278.  
  6279. ; sub.w d1,d2
  6280.  
  6281. ; moveq #0,d1
  6282. ; moveq #0,d3
  6283. ; move.w leftbrighttab-leftsidetab(a4),d1
  6284. ; bge.s .okbl
  6285. ; moveq #0,d1
  6286. ;.okbl:
  6287.  
  6288. ; move.w rightbrighttab-leftsidetab(a4),d3
  6289. ; bge.s .okbr
  6290. ; moveq #0,d3
  6291. ;.okbr:
  6292.  
  6293. ; sub.w d1,d3
  6294. ; asl.w #8,d1
  6295. ; move.l d1,leftbright
  6296. ; swap d3
  6297. ; asr.l #5,d3
  6298. ; divs d2,d3
  6299. ; ext.l d3
  6300. ; asl.l #5,d3
  6301. ; swap d3
  6302. ; asl.w #8,d3
  6303. ; move.l d3,brightspd
  6304.  
  6305.  move.l a6,a3
  6306.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6307.  move.l a2,d7
  6308.  divs d0,d7
  6309.  move.w d7,d0
  6310.  jsr (a5)
  6311.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6312.  sub.w #1,disttobot
  6313.  adda.w linedir(pc),a6
  6314.  addq #1,d0
  6315.  subq #1,d7
  6316.  bgt dofloornoclip
  6317.  
  6318.  bra predontdrawfloor
  6319.  
  6320. dogourfloor:
  6321.  tst.b anyclipping
  6322.  beq dofloornoclipGOUR
  6323.  
  6324. dofloorGOUR:
  6325. ; move.w (a2)+,d0
  6326.  move.w leftclip(pc),d3
  6327.  move.w rightclip(pc),d4
  6328.  move.w rightsidetab-leftsidetab(a4),d2
  6329.  
  6330.  move.w d2,d5
  6331.  sub.w (a4),d5
  6332.  addq #1,d5
  6333.  moveq #0,d6
  6334.  
  6335.  addq #1,d2
  6336.  cmp.w d3,d2
  6337.  ble nodrawlineGOUR
  6338.  cmp.w d4,d2
  6339.  ble.s nocliprightGOUR
  6340.  move.w d4,d2
  6341. nocliprightGOUR:
  6342.  move.w (a4),d1
  6343.  cmp.w d4,d1
  6344.  bge nodrawlineGOUR
  6345.  cmp.w d3,d1
  6346.  bge.s noclipleftGOUR
  6347.  move.w d3,d6
  6348.  subq #1,d6
  6349.  sub.w d1,d6
  6350.  move.w d3,d1
  6351. noclipleftGOUR:
  6352.  cmp.w d1,d2
  6353.  ble nodrawlineGOUR
  6354.  
  6355.  move.w d1,leftedge
  6356.  move.w d2,rightedge
  6357.  
  6358.  move.l a2,d2
  6359.  divs d0,d2
  6360.  move.w d2,dst
  6361.  asr.w #7,d2
  6362. ; addq #5,d2
  6363. ; add.w lighttype,d2
  6364.  
  6365.  moveq #0,d1
  6366.  moveq #0,d3
  6367.  move.w leftbrighttab-leftsidetab(a4),d1
  6368.  add.w d2,d1
  6369.  bge.s .okbl
  6370.  moveq #0,d1
  6371. .okbl:
  6372.  asr.w #1,d1
  6373.  cmp.w #14,d1
  6374.  ble.s .okdl
  6375.  move.w #14,d1
  6376. .okdl:
  6377.  
  6378.  move.w rightbrighttab-leftsidetab(a4),d3
  6379.  add.w d2,d3
  6380.  bge.s .okbr
  6381.  moveq #0,d3
  6382. .okbr:
  6383.  asr.w #1,d3
  6384.  cmp.w #14,d3
  6385.  ble.s .okdr
  6386.  move.w #14,d3
  6387. .okdr:
  6388.  
  6389.  sub.w d1,d3
  6390.  asl.w #8,d1
  6391.  move.l d1,leftbright
  6392.  swap d3
  6393.  tst.l d3
  6394.  bgt.s .OKITSPOSALREADY 
  6395.  neg.l d3
  6396.  asr.l #5,d3
  6397.  divs d5,d3
  6398.  neg.w d3
  6399.  bra.s .OKNOWITSNEG
  6400.  
  6401. .OKITSPOSALREADY
  6402.  asr.l #5,d3
  6403.  divs d5,d3
  6404. .OKNOWITSNEG
  6405.  muls d3,d6
  6406.  add.w #256*8,d6
  6407.  asr.w #3,d6
  6408.  clr.b d6
  6409.  add.w d6,leftbright+2
  6410.  
  6411.  ext.l d3
  6412.  asl.l #5,d3
  6413.  swap d3
  6414.  asl.w #8,d3
  6415.  move.l d3,brightspd
  6416.  
  6417.  move.l a6,a3
  6418.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6419.  move.w dst,d0
  6420.  lea floorscalecols,a1
  6421.  move.l floortile,a0
  6422.  adda.w whichtile,a0
  6423.  jsr pastfloorbright
  6424.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6425. nodrawlineGOUR
  6426.  
  6427.  sub.w #1,disttobot
  6428.  
  6429.  adda.w linedir(pc),a6
  6430.  addq #2,a4
  6431.  addq #1,d0
  6432.  subq #1,d7
  6433.  bgt dofloorGOUR
  6434.  
  6435. predontdrawfloorGOUR
  6436.  move.l (a7)+,a0
  6437.  
  6438. dontdrawfloorGOUR:
  6439.  
  6440.  rts
  6441.  
  6442. dofloornoclipGOUR:
  6443. ; move.w (a2)+,d0
  6444.  move.w rightsidetab-leftsidetab(a4),d2
  6445.  addq #1,d2
  6446.  move.w (a4),d1
  6447.  move.w d1,leftedge
  6448.  move.w d2,rightedge
  6449.  
  6450.  sub.w d1,d2
  6451.  
  6452.  move.l a2,d6
  6453.  divs d0,d6
  6454.  move.w d6,d5
  6455.  asr.w #7,d5
  6456. ; addq #5,d5
  6457. ; add.w lighttype,d5
  6458.  
  6459.  moveq #0,d1
  6460.  moveq #0,d3
  6461.  move.w leftbrighttab-leftsidetab(a4),d1
  6462.  add.w d5,d1
  6463.  bge.s .okbl
  6464.  moveq #0,d1
  6465. .okbl:
  6466.  asr.w #1,d1
  6467.  cmp.w #14,d1
  6468.  ble.s .okdl
  6469.  move.w #14,d1
  6470. .okdl:
  6471.  
  6472.  move.w rightbrighttab-leftsidetab(a4),d3
  6473.  add.w d5,d3
  6474.  bge.s .okbr
  6475.  moveq #0,d3
  6476. .okbr:
  6477.  asr.w #1,d3
  6478.  cmp.w #14,d3
  6479.  ble.s .okdr
  6480.  move.w #14,d3
  6481. .okdr:
  6482.  
  6483.  sub.w d1,d3
  6484.  asl.w #8,d1
  6485.  move.l d1,leftbright
  6486.  swap d3
  6487.  asr.l #5,d3
  6488.  divs d2,d3
  6489.  ext.l d3
  6490.  asl.l #5,d3
  6491.  swap d3
  6492.  asl.w #8,d3
  6493.  move.l d3,brightspd
  6494.  
  6495.  
  6496.  move.l a6,a3
  6497.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6498.  move.w d6,d0
  6499.  move.w d0,dst
  6500.  lea floorscalecols,a1
  6501.  move.l floortile,a0
  6502.  adda.w whichtile,a0
  6503.  jsr pastfloorbright
  6504.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6505.  sub.w #1,disttobot
  6506.  adda.w linedir(pc),a6
  6507.  addq #2,a4
  6508.  addq #1,d0
  6509.  subq #1,d7
  6510.  bgt dofloornoclipGOUR
  6511.  
  6512.  bra predontdrawfloorGOUR
  6513.  
  6514.  
  6515.  
  6516. dists:
  6517. ; incbin "floordists"
  6518. drawit: dc.w 0
  6519.  
  6520. LineToUse: dc.l 0
  6521.  
  6522. ***************************
  6523. * Right then, time for the floor
  6524. * routine...
  6525. * For test purposes, give it
  6526. * a3 = point to screen
  6527. * d0= z distance away
  6528. * and sinval+cosval must be set up.
  6529. ***************************
  6530.  
  6531. BLACKFLOOR:
  6532.  moveq #0,d0
  6533.  bra.s DOBLACK
  6534.  
  6535. SimpleFloorLine:
  6536.  
  6537.  CACHE_OFF d2
  6538.  
  6539.  move.l #doacrossline,a1
  6540.  move.w leftedge(pc),d1
  6541.  move.w rightedge(pc),d3
  6542.  sub.w d1,d3
  6543.  lea (a1,d1.w*4),a1
  6544.  move.w (a1,d3.w*4),d4
  6545.  move.w #$4e75,(a1,d3.w*4)
  6546.  
  6547.  tst.b CLRNOFLOOR
  6548.  bne.s BLACKFLOOR
  6549.  
  6550.  move.l #PLAINSCALE,a2
  6551.  
  6552.  move.w d0,d2
  6553.  move.w lighttype,d1
  6554.  asr.w #8,d2
  6555.  add.w #5,d1
  6556.  add.w d2,d1
  6557.  bge.s .fixedbright
  6558.  moveq #0,d1
  6559. .fixedbright:
  6560.  cmp.w #28,d1
  6561.  ble.s .smallbright
  6562.  move.w #28,d1
  6563. .smallbright:
  6564.  lea (a2,d1.w*2),a2
  6565.  
  6566.  move.w whichtile,d0
  6567.  move.w d0,d1
  6568.  and.w #$3,d1
  6569.  and.w #$300,d0
  6570.  lsl.b #6,d1
  6571.  move.b d1,d0
  6572.  move.w d0,tstwhich
  6573.  move.w (a2,d0.w),d0
  6574.  
  6575. DOBLACK:
  6576.  jsr (a1)
  6577.  move.w d4,(a1,d3.w*4)
  6578.  
  6579.  CACHE_ON d2
  6580.  
  6581.  rts
  6582.  
  6583. tstwhich: dc.w 0
  6584. whichtile: dc.w 0
  6585.   
  6586. PLAINSCALE: incbin "ab3:includes/plainscale"
  6587.   
  6588. storeit: dc.l 0
  6589.  
  6590. doacrossline:
  6591. val SET 0
  6592.  REPT 32
  6593.  move.w d0,val(a3)
  6594. val SET val+4
  6595.  ENDR
  6596. val SET val+4
  6597.  REPT 32
  6598.  move.w d0,val(a3)
  6599. val SET val+4
  6600.  ENDR
  6601. val SET val+4
  6602.  REPT 32
  6603.  move.w d0,val(a3)
  6604. val SET val+4
  6605.  ENDR
  6606.  rts
  6607.  
  6608.  
  6609. leftedge: dc.w 0
  6610. rightedge: dc.w 0
  6611.  
  6612. rndpt: dc.l rndtab
  6613.  
  6614.  
  6615. dst: dc.w 0
  6616.  
  6617. FloorLine:
  6618.  
  6619.  move.l floortile,a0
  6620.  adda.w whichtile,a0
  6621.  move.w lighttype,d1
  6622.  move.w d0,dst
  6623.  move.w d0,d2
  6624. *********************
  6625. * Old version
  6626.  asr.w #8,d2
  6627.  add.w #5,d1
  6628. *********************
  6629. ; asr.w #3,d2
  6630. ; sub.w #4,d2
  6631. ; cmp.w #6,d2
  6632. ; blt.s flbrbr
  6633. ; move.w #6,d2
  6634. ;flbrbr:
  6635. *********************
  6636.  add.w d2,d1
  6637.  bge.s .fixedbright
  6638.  moveq #0,d1
  6639. .fixedbright:
  6640.  cmp.w #28,d1
  6641.  ble.s .smallbright
  6642.  move.w #28,d1
  6643. .smallbright:
  6644.  lea floorscalecols,a1
  6645.  add.l floorbright(pc,d1.w*4),a1
  6646.  bra pastfloorbright
  6647.  
  6648. ConstCol: dc.w 0
  6649.  
  6650. BumpLine:
  6651.  
  6652.  tst.b smoothbumps
  6653.  beq.s Chunky
  6654.  
  6655.  move.l #SmoothTile,a0
  6656.  lea Smoothscalecols,a1
  6657.  bra pastast
  6658.  
  6659. Chunky:
  6660.  
  6661.  moveq #0,d2
  6662.  move.l #Bumptile,a0
  6663.  move.w whichtile,d2
  6664.  adda.w d2,a0
  6665.  ror.l #2,d2
  6666.  lsr.w #6,d2
  6667.  rol.l #2,d2
  6668.  and.w #15,d2
  6669.  move.l #ConstCols,a1
  6670.  move.w (a1,d2.w*2),ConstCol
  6671.  lea Bumpscalecols,a1
  6672.  
  6673. pastast:
  6674.  move.w lighttype,d1
  6675.  
  6676.  move.w d0,dst
  6677.  
  6678.  move.w d0,d2
  6679. *********************
  6680. * Old version
  6681.  asr.w #8,d2
  6682.  add.w #5,d1
  6683. *********************
  6684. ; asr.w #3,d2
  6685. ; sub.w #4,d2
  6686. ; cmp.w #6,d2
  6687. ; blt.s flbrbr
  6688. ; move.w #6,d2
  6689. ;flbrbr:
  6690. *********************
  6691.  add.w d2,d1
  6692.  bge.s .fixedbright
  6693.  moveq #0,d1
  6694. .fixedbright:
  6695.  cmp.w #28,d1
  6696.  ble.s .smallbright
  6697.  move.w #28,d1
  6698. .smallbright:
  6699.  add.l floorbright(pc,d1.w*4),a1
  6700.  bra pastfloorbright
  6701.  
  6702.  
  6703. floorbright:
  6704.  dc.l 512*0
  6705.  dc.l 512*1
  6706.  dc.l 512*1
  6707.  dc.l 512*2
  6708.  dc.l 512*2
  6709.  
  6710.  dc.l 512*3
  6711.  dc.l 512*3
  6712.  dc.l 512*4
  6713.  dc.l 512*4
  6714.  dc.l 512*5
  6715.  
  6716.  dc.l 512*5
  6717.  dc.l 512*6
  6718.  dc.l 512*6
  6719.  dc.l 512*7
  6720.  dc.l 512*7
  6721.  
  6722.  dc.l 512*8
  6723.  dc.l 512*8
  6724.  dc.l 512*9
  6725.  dc.l 512*9
  6726.  dc.l 512*10
  6727.  
  6728.  dc.l 512*10
  6729.  dc.l 512*11
  6730.  dc.l 512*11
  6731.  dc.l 512*12
  6732.  dc.l 512*12
  6733.  
  6734.  dc.l 512*13
  6735.  dc.l 512*13
  6736.  dc.l 512*14
  6737.  dc.l 512*14
  6738.  
  6739. widthleft: dc.w 0
  6740. scaleval: dc.w 0
  6741. sxoff: dc.l 0
  6742. szoff: dc.l 0
  6743. xoff34: dc.w 0
  6744. zoff34: dc.w 0
  6745. scosval: dc.w 0
  6746. ssinval: dc.w 0
  6747.  
  6748.  
  6749. floorsetbright:
  6750.  move.l #walltiles,a0
  6751.  
  6752. pastfloorbright
  6753.  
  6754.  move.w d0,d1
  6755.  muls cosval,d1    ; change in x across whole width
  6756.  move.w d0,d2
  6757.  muls sinval,d2    ; change in z across whole width
  6758.  neg.l d2
  6759. scaleprog:
  6760.  move.w scaleval(pc),d3
  6761.  beq.s .samescale
  6762.  bgt.s .scaledown
  6763.  neg.w d3
  6764.  asr.l d3,d1
  6765.  asr.l d3,d2
  6766.  bra.s .samescale
  6767. .scaledown:
  6768.  asl.l d3,d1
  6769.  asl.l d3,d2
  6770. .samescale
  6771.  
  6772.  move.l d1,d3 ;    z cos
  6773.  move.l d3,d6
  6774.  move.l d3,d5
  6775.  asr.l #1,d6
  6776.  add.l d6,d3
  6777.  asr.l #1,d3
  6778.  
  6779.  move.l d2,d4    ; z sin
  6780.  move.l d4,d6
  6781.  asr.l #1,d6
  6782.  add.l d4,d6
  6783.  add.l d3,d4
  6784.  neg.l d4    ; start x
  6785.  
  6786.  asr.l #1,d6    ; zsin/2
  6787.  sub.l d6,d5    ; start z
  6788.  
  6789.  add.l sxoff,d4
  6790.  add.l szoff,d5
  6791.  
  6792.  moveq #0,d6
  6793.  move.w leftedge(pc),d6
  6794.  beq.s nomultleft
  6795.  
  6796.  move.l d1,a4
  6797.  move.l d2,a5
  6798.  
  6799.  muls.l d6,d3:d1
  6800.  asr.l #6,d1
  6801.  add.l d1,d4
  6802.  
  6803.  muls.l d6,d3:d2
  6804.  asr.l #6,d2
  6805.  add.l d2,d5
  6806.  move.l a4,d1
  6807.  move.l a5,d2
  6808.  
  6809. nomultleft:
  6810.  
  6811.  move.w d4,startsmoothx
  6812.  move.w d5,startsmoothz
  6813.  
  6814.  swap d4
  6815.  asr.l #8,d5
  6816. ; add.w szoff,d5
  6817. ; add.w sxoff,d4
  6818.  and.w #63,d4
  6819.  and.w #63*256,d5
  6820.  move.b d4,d5
  6821.  
  6822.  asr.l #6,d1
  6823.  asr.l #6,d2
  6824.  move.w d1,a4
  6825.  move.w d2,a5
  6826.  asr.l #8,d2
  6827.  and.w #%0011111100000000,d2
  6828.  swap d1
  6829.  add.w d1,d2
  6830.  move.w #%11111100111111,d1
  6831.  and.w d1,d5
  6832.  swap d5
  6833.  move.w startsmoothz,d5
  6834.  swap d5
  6835.  swap d2
  6836.  move.w a5,d2
  6837.  swap d2
  6838.  
  6839. ***********************************
  6840.  
  6841.  move.w d6,a2
  6842.  move.l d2,d6
  6843.  add.w #256,d6
  6844.  
  6845.  moveq #0,d0
  6846.  
  6847.  tst.w a2
  6848.  beq startatleftedge
  6849.  
  6850.  move.w widthleft(pc),d4
  6851.  
  6852.  move.w rightedge(pc),d3
  6853.  
  6854.  cmp.w #31,a2
  6855.  bgt.s notinfirststrip
  6856.  lea (a3,a2.w*4),a3
  6857.  cmp.w #32,d3
  6858.  ble.s allinfirststrip
  6859.  move.w #32,d7
  6860.  sub.w d7,d3
  6861.  sub.w a2,d7
  6862.  bra intofirststrip
  6863.  
  6864. allinfirststrip
  6865.  sub.w a2,d3
  6866.  move.w d3,d7
  6867.  move.w #0,d4
  6868.  bra allintofirst
  6869.  
  6870. notinfirststrip:
  6871.  sub.w #32,a2
  6872.  sub.w #32,d3
  6873.  adda.w #33*4,a3
  6874.  cmp.w #31,a2
  6875.  bgt.s notstartinsec
  6876.  lea (a3,a2.w*4),a3
  6877.  cmp.w #32,d3
  6878.  ble.s allinsecstrip
  6879.  move.w #32,d7
  6880.  sub.w d7,d3
  6881.  sub.w a2,d7
  6882.  move.w d3,d4
  6883.  bra allintofirst
  6884.  
  6885. allinsecstrip
  6886.  sub.w a2,d3
  6887.  move.w d3,d7
  6888.  move.w #0,d4
  6889.  bra allintofirst
  6890.  rts
  6891.  
  6892. prot8: dc.w 0
  6893.  
  6894. notstartinsec:
  6895.  sub.w #32,a2
  6896.  sub.w #32,d3
  6897.  adda.w #33*4,a3
  6898.  lea (a3,a2.w*4),a3
  6899.  cmp.w #32,d3
  6900.  ble.s allinthirdstrip
  6901.  move.w #32,d7
  6902.  sub.w d7,d3
  6903.  sub.w a2,d7
  6904.  move.w d3,d4
  6905.  bra allintofirst
  6906.  rts
  6907.  
  6908. allinthirdstrip
  6909.  sub.w a2,d3
  6910.  move.w d3,d7
  6911.  move.w #0,d4
  6912.  bra allintofirst
  6913.  rts
  6914.  
  6915. startatleftedge:
  6916.  
  6917.  move.w rightedge(pc),d3
  6918.  sub.w a2,d3
  6919.  
  6920.  move.w d3,d7
  6921.  cmp.w #32,d7
  6922.  ble.s .notoowide
  6923.  move.w #32,d7
  6924. .notoowide:
  6925.  sub.w d7,d3
  6926. intofirststrip:
  6927.  
  6928.  move.w d3,d4
  6929. allintofirst:
  6930.  
  6931.  move.w startsmoothx,d3
  6932.  
  6933. tstwat:
  6934.  
  6935.  tst.b gourfloor
  6936.  bne gouraudfloor
  6937.  
  6938.  tst.b usewater
  6939.  bne texturedwater
  6940.  
  6941.  
  6942. ******************************
  6943. * BumpMap the floor/ceiling! *
  6944.  tst.b usebumps
  6945.  bne.s BumpMap
  6946. ******************************
  6947.  
  6948. ordinary:
  6949.  moveq #0,d0
  6950.  
  6951.  dbra d7,acrossscrn
  6952.  rts
  6953.  
  6954. usebumps: dc.w $0
  6955. smoothbumps: dc.w $0
  6956. gourfloor: dc.w 0
  6957.  
  6958.  include "ab3:source/bumpmap.s"
  6959.  
  6960.  CNOP 0,4
  6961. backbefore:
  6962.  and.w d1,d5
  6963.  move.b (a0,d5.w*4),d0
  6964.  add.w a4,d3
  6965.  move.w (a1,d0.w*2),(a3)
  6966.  addq #4,a3
  6967.  addx.l d6,d5
  6968.  dbcs d7,acrossscrn
  6969.  dbcc d7,backbefore
  6970.  bra.s past1
  6971.  
  6972. acrossscrn:
  6973.  and.w d1,d5
  6974.  move.b (a0,d5.w*4),d0
  6975.  add.w a4,d3
  6976.  move.w (a1,d0.w*2),(a3)
  6977.  addq #4,a3
  6978.  addx.l d2,d5
  6979.  dbcs d7,acrossscrn
  6980.  dbcc d7,backbefore
  6981. past1:
  6982.  bcc.s gotoacross
  6983.  
  6984.  move.w d4,d7
  6985.  bne.s .notdoneyet
  6986.  rts
  6987. .notdoneyet:
  6988.  
  6989.  cmp.w #32,d7
  6990.  ble.s .notoowide
  6991.  move.w #32,d7
  6992. .notoowide
  6993.  sub.w d7,d4  
  6994.  addq #4,a3
  6995.  
  6996.  dbra d7,backbefore
  6997.  rts
  6998.  
  6999.  
  7000. gotoacross:
  7001.  
  7002.  move.w d4,d7
  7003.  bne.s .notdoneyet
  7004.  rts
  7005. .notdoneyet:
  7006.  
  7007.  cmp.w #32,d7
  7008.  ble.s .notoowide
  7009.  move.w #32,d7
  7010. .notoowide
  7011.  sub.w d7,d4  
  7012.  addq #4,a3
  7013.  
  7014.  dbra d7,acrossscrn
  7015.  rts
  7016.  
  7017. leftbright: dc.l 0
  7018. brightspd: dc.l 0
  7019.  
  7020. gouraudfloor:
  7021.  move.l leftbright,d0
  7022.  move.l brightspd,d1
  7023.  dbra d7,acrossscrngour
  7024.  rts
  7025.  
  7026.  CNOP 0,4
  7027. backbeforegour:
  7028.  and.w #63*256+63,d5
  7029.  move.b (a0,d5.w*4),d0
  7030.  add.l d1,d0
  7031.  bcc.s .nomoreb
  7032.  add.w #256,d0
  7033. .nomoreb:
  7034.  add.w a4,d3
  7035.  move.w (a1,d0.w*2),(a3)
  7036.  addq #4,a3 
  7037.  addx.l d6,d5
  7038.  dbcs d7,acrossscrngour
  7039.  dbcc d7,backbeforegour
  7040.  bra.s past1gour
  7041.  
  7042. acrossscrngour:
  7043.  and.w #63*256+63,d5
  7044.  move.b (a0,d5.w*4),d0
  7045.  add.l d1,d0
  7046.  bcc.s .nomoreb
  7047.  add.w #256,d0
  7048. .nomoreb:
  7049.  add.w a4,d3
  7050.  move.w (a1,d0.w*2),(a3)
  7051.  addq #4,a3
  7052.  addx.l d2,d5
  7053.  dbcs d7,acrossscrngour
  7054.  dbcc d7,backbeforegour
  7055. past1gour:
  7056.  bcc.s gotoacrossgour
  7057.  
  7058.  move.w d4,d7
  7059.  bne.s .notdoneyet
  7060.  move.l d0,leftbright
  7061.  
  7062.  rts
  7063. .notdoneyet:
  7064.  
  7065.  cmp.w #32,d7
  7066.  ble.s .notoowide
  7067.  move.w #32,d7
  7068. .notoowide
  7069.  sub.w d7,d4  
  7070.  addq #4,a3
  7071.  
  7072.  dbra d7,backbeforegour
  7073.  rts
  7074.  
  7075.  
  7076. gotoacrossgour:
  7077.  
  7078.  move.w d4,d7
  7079.  bne.s .notdoneyet
  7080.  rts
  7081. .notdoneyet:
  7082.  
  7083.  cmp.w #32,d7
  7084.  ble.s .notoowide
  7085.  move.w #32,d7
  7086. .notoowide
  7087.  sub.w d7,d4  
  7088.  addq #4,a3
  7089.  
  7090.  dbra d7,acrossscrngour
  7091.  rts
  7092.  
  7093.  
  7094. waterpt: dc.l waterlist
  7095.  
  7096. waterlist:
  7097.  dc.l waterfile
  7098.  dc.l waterfile+2
  7099.  dc.l waterfile+256
  7100.  dc.l waterfile+256+2
  7101.  dc.l waterfile+512
  7102.  dc.l waterfile+512+2
  7103.  dc.l waterfile+768
  7104.  dc.l waterfile+768+2
  7105. ; dc.l waterfile+768
  7106. ; dc.l waterfile+512+2
  7107. ; dc.l waterfile+512
  7108. ; dc.l waterfile+256+2
  7109. ; dc.l waterfile+256
  7110. ; dc.l waterfile+2
  7111. endwaterlist:
  7112.  
  7113. watertouse: dc.l waterfile
  7114.  
  7115. wtan: dc.w 0
  7116. wateroff: dc.w 0
  7117.  
  7118. texturedwater:
  7119.  
  7120.  add.w wateroff,d5
  7121.  
  7122.  move.l #brightentab,a1
  7123.  move.w dst,d0
  7124.  clr.b d0
  7125.  
  7126.  add.w d0,d0
  7127.  cmp.w #12*512,d0
  7128.  blt.s .notoowater
  7129.  move.w #12*512,d0
  7130.  
  7131.  
  7132. .notoowater:
  7133.   
  7134.  adda.w d0,a1
  7135.  
  7136.  move.w dst,d0
  7137.  asl.w #7,d0
  7138.  add.w wtan,d0
  7139.  and.w #8191,d0
  7140.  move.l #SineTable,a0
  7141.  move.w (a0,d0.w),d0
  7142.  ext.l d0
  7143.  
  7144.  move.w dst,d3
  7145.  add.w #300,d3
  7146.  divs d3,d0
  7147.  asr.w #6,d0
  7148.  addq #2,d0
  7149.  cmp.w disttobot,d0
  7150.  blt.s oknotoffbototot
  7151.  
  7152.  move.w disttobot,d0
  7153.  subq #1,d0
  7154.  
  7155. oknotoffbototot
  7156.  
  7157. ; move.w dst,d3
  7158. ; asr.w #7,d3
  7159. ; add.w d3,d0
  7160.  
  7161.  muls #104*4,d0
  7162.  tst.w above
  7163.  beq.s nonnnnneg
  7164.  neg.l d0
  7165.  
  7166. nonnnnneg:
  7167.  
  7168.  move.l d0,a6
  7169.  
  7170.  move.l watertouse,a0
  7171.  
  7172.  move.w startsmoothx,d3
  7173.  dbra d7,acrossscrnw
  7174.  rts
  7175.  
  7176. backbeforew:
  7177.  and.w d1,d5
  7178.  move.w (a0,d5.w*4),d0
  7179.  move.b 1(a3,a6.w),d0
  7180.  move.w (a1,d0.w*2),(a3)
  7181.  addq #4,a3
  7182.  add.w a4,d3
  7183.  addx.l d6,d5
  7184.  dbcs d7,acrossscrnw
  7185.  dbcc d7,backbeforew
  7186.  bcc.s past1w
  7187.  add.w #256,d5 
  7188.  bra.s past1w
  7189.  
  7190. acrossscrnw:
  7191.  and.w d1,d5
  7192.  move.w (a0,d5.w*4),d0
  7193.  move.b 1(a3,a6.w),d0
  7194.  move.w (a1,d0.w*2),(a3)
  7195.  addq #4,a3
  7196.  add.w a4,d3
  7197.  addx.l d2,d5
  7198.  dbcs d7,acrossscrnw
  7199.  dbcc d7,backbeforew
  7200.  bcc.s past1w
  7201.  add.w #256,d5 
  7202. past1w:
  7203.  
  7204.  move.w d4,d7
  7205.  bne.s .notdoneyet
  7206.  rts
  7207. .notdoneyet:
  7208.  
  7209.  cmp.w #32,d7
  7210.  ble.s .notoowide
  7211.  move.w #32,d7
  7212. .notoowide
  7213.  sub.w d7,d4  
  7214.  addq #4,a3
  7215.  
  7216.  dbra d7,acrossscrnw
  7217.  rts
  7218.  
  7219. usewater: dc.w 0
  7220.  dc.w 0
  7221. startsmoothx: dc.w 0
  7222.  dc.w 0
  7223. startsmoothz: dc.w 0
  7224.  
  7225. ********************************
  7226. *
  7227.  include "AB3:source/ObjDraw3.chipram"
  7228. *
  7229. ********************************
  7230.  
  7231. numframes:
  7232.  dc.w 0
  7233.  
  7234. alframe: dc.l 0
  7235.  
  7236. alan:
  7237.  dcb.l 8,0
  7238.  dcb.l 8,1
  7239.  dcb.l 8,2
  7240.  dcb.l 8,3
  7241. endalan:
  7242.  
  7243. alanptr: dc.l alan
  7244.  
  7245. Time2: dc.l 0
  7246. dispco:
  7247.  dc.w 0
  7248.  
  7249.  
  7250. key_interrupt:
  7251.         movem.l    d0-d7/a0-a6,-(sp)
  7252.  
  7253. ;        move.w    INTREQR,d0
  7254. ;        btst    #3,d0
  7255. ;        beq    .not_key
  7256.  
  7257.         move.b    $bfdd00,d0
  7258.         btst    #0,d0
  7259.         bne    .key_cont
  7260. ;        move.b    $bfed01,d0
  7261. ;        btst    #0,d0
  7262. ;        bne    .key_cont
  7263.     
  7264. ;        btst    #3,d0
  7265. ;        beq    .key_cont
  7266.  
  7267.         move.b    $bfec01,d0
  7268.         clr.b    $bfec01
  7269.  
  7270.         tst.b    d0
  7271.         beq    .key_cont
  7272.  
  7273. ;        bset    #6,$bfee01
  7274. ;        move.b    #$f0,$bfe401
  7275. ;        move.b    #$00,$bfe501
  7276. ;        bset    #0,$bfee01
  7277.  
  7278.  
  7279.         not.b    d0
  7280.         ror.b    #1,d0
  7281.         lea.l    KeyMap,a0
  7282.         tst.b    d0
  7283.         bmi.b    .key_up
  7284.         and.w    #$7f,d0
  7285. ;        add.w    #1,d0
  7286.         move.b    #$ff,(a0,d0.w)
  7287.         move.b    d0,lastpressed
  7288.  
  7289.         bra.b    .key_cont2
  7290. .key_up:
  7291.         and.w    #$7f,d0
  7292. ;        add.w    #1,d0
  7293.         move.b    #$00,(a0,d0.w)
  7294.  
  7295. .key_cont2
  7296. ;        btst    #0,$bfed01
  7297. ;        beq    .key_cont2
  7298. ;        move.b    #%00000000,$bfee01
  7299. ;        move.b    #%10001000,$bfed01
  7300.  
  7301. ;alt keys should not be independent so overlay ralt on lalt
  7302.  
  7303.         
  7304. .key_cont
  7305.  
  7306. ;        move.w    #$0008,INTREQ
  7307. .not_key:    ;lea.l    $dff000,a5
  7308.  
  7309. ;        lea.l    _keypressed(pc),a0
  7310. ;        move.b    101(a0),d0    ;read LALT
  7311. ;        or.b    102(a0),d0    ;blend it with RALT
  7312. ;        move.b    d0,127(a0)    ;save in combined position
  7313.  
  7314.         movem.l    (sp)+,d0-d7/a0-a6
  7315.  
  7316.         rts
  7317.  
  7318. lastpressed:    dc.b 0
  7319. KInt_CCode    Ds.b    1
  7320. KInt_Askey    Ds.b    1
  7321. KInt_OCode    Ds.w    1
  7322.  
  7323.  
  7324. OldSpace: dc.b 0
  7325. SpaceTapped: dc.b 0
  7326. PLR1_SPCTAP: dc.b 0
  7327. PLR2_SPCTAP: dc.b 0
  7328. PLR1_Ducked: dc.b 0
  7329. PLR2_Ducked: dc.b 0
  7330.  even
  7331.  
  7332.  include "ab3:source/PLR1CONTROL.s"
  7333.  include "ab3:source/PLR2CONTROL.s"
  7334.  include "ab3:source/FALL.s"
  7335.  
  7336. prot7: dc.w 0
  7337.  
  7338. GOTTOSEND: dc.w 0
  7339.  
  7340. OtherInter:
  7341.  move.w #$0010,$dff000+intreq
  7342.  movem.l d0-d7/a0-a6,-(a7)
  7343.  bra.s justshake
  7344.  
  7345.     cnop 0,4
  7346.  
  7347. Chan0inter:
  7348.  
  7349.     SAVEREGS
  7350.     jsr    .routine
  7351.     GETREGS
  7352.  
  7353. ;    move.w    #1024+'.',$dff030
  7354.     
  7355.     moveq    #0,d0
  7356.     rts
  7357.  
  7358. .routine
  7359.  
  7360.     
  7361. ;w move.w #$0010,$dff000+intreq
  7362.  
  7363.  tst.b doanything
  7364.  bne.s dosomething
  7365.  
  7366.  moveq #0,d0
  7367.  rts
  7368.  
  7369. dosomething:
  7370.  
  7371.  
  7372.  addq.w #1,FramesToDraw
  7373.  movem.l d0-d7/a0-a6,-(a7)
  7374.  
  7375. ; jsr INITREC
  7376. ; jsr RECEIVE
  7377.  
  7378. ; tst.l BUFFER
  7379. ; beq.s justshake
  7380. ; st GOTTOSEND
  7381. ; move.l #OtherInter,$6c
  7382.  
  7383. justshake:
  7384.  
  7385.  cmp.b #'b',Prefsfile+3
  7386.  bne.s .noback
  7387.  jsr mt_music
  7388. .noback:
  7389.  
  7390.  bra dontshowtime
  7391.  
  7392.  tst.b oktodisplay
  7393.  beq dontshowtime
  7394.  clr.b oktodisplay
  7395.  subq.w #1,dispco
  7396.  bgt dontshowtime
  7397.  move.w #10,dispco
  7398.  
  7399.  move.l #TimerScr+10,a0
  7400.  move.l TimeCount,d0
  7401.  bge.s timenotneg
  7402.  move.l #1111*256,d0
  7403. timenotneg:
  7404.  asr.l #8,d0
  7405.  move.l #digits,a1
  7406.  move.w #7,d2
  7407. digitlop
  7408.  divs #10,d0
  7409.  swap d0
  7410.  lea (a1,d0.w*8),a2
  7411.  move.b (a2)+,(a0)
  7412.  move.b (a2)+,24(a0)
  7413.  move.b (a2)+,24*2(a0)
  7414.  move.b (a2)+,24*3(a0)
  7415.  move.b (a2)+,24*4(a0)
  7416.  move.b (a2)+,24*5(a0)
  7417.  move.b (a2)+,24*6(a0)
  7418.  move.b (a2)+,24*7(a0)
  7419.  subq #1,a0
  7420.  swap d0
  7421.  ext.l d0
  7422.  dbra d2,digitlop
  7423.  
  7424.  move.l #TimerScr+10+24*10,a0
  7425.  move.l NumTimes,d0
  7426.  move.l #digits,a1
  7427.  move.w #3,d2
  7428. digitlop2
  7429.  divs #10,d0
  7430.  swap d0
  7431.  lea (a1,d0.w*8),a2
  7432.  move.b (a2)+,(a0)
  7433.  move.b (a2)+,24(a0)
  7434.  move.b (a2)+,24*2(a0)
  7435.  move.b (a2)+,24*3(a0)
  7436.  move.b (a2)+,24*4(a0)
  7437.  move.b (a2)+,24*5(a0)
  7438.  move.b (a2)+,24*6(a0)
  7439.  move.b (a2)+,24*7(a0)
  7440.  subq #1,a0
  7441.  swap d0
  7442.  ext.l d0
  7443.  dbra d2,digitlop2
  7444.  
  7445.  move.l #TimerScr+10+24*20,a0
  7446.  moveq #0,d0
  7447.  move.w FramesToDraw,d0
  7448.  move.l #digits,a1
  7449.  move.w #2,d2
  7450. digitlop3
  7451.  divs #10,d0
  7452.  swap d0
  7453.  lea (a1,d0.w*8),a2
  7454.  move.b (a2)+,(a0)
  7455.  move.b (a2)+,24(a0)
  7456.  move.b (a2)+,24*2(a0)
  7457.  move.b (a2)+,24*3(a0)
  7458.  move.b (a2)+,24*4(a0)
  7459.  move.b (a2)+,24*5(a0)
  7460.  move.b (a2)+,24*6(a0)
  7461.  move.b (a2)+,24*7(a0)
  7462.  subq #1,a0
  7463.  swap d0
  7464.  ext.l d0
  7465.  dbra d2,digitlop3
  7466.  
  7467. dontshowtime:
  7468.  
  7469.  
  7470.  move.l alanptr,a0
  7471.  move.l (a0)+,alframe
  7472.  cmp.l #endalan,a0
  7473.  blt.s nostartalan
  7474.  move.l #alan,a0
  7475. nostartalan:
  7476.  move.l a0,alanptr
  7477.  
  7478.  
  7479.  tst.b READCONTROLS
  7480.  beq.s nocontrols
  7481.  
  7482.  cmp.b #'s',mors
  7483.  beq.s control2
  7484.  
  7485.  tst.b PLR1MOUSE
  7486.  beq.s PLR1_nomouse
  7487.  bsr PLR1_mouse_control
  7488. PLR1_nomouse:
  7489.  tst.b PLR1KEYS
  7490.  beq.s PLR1_nokeys
  7491.  bsr PLR1_keyboard_control
  7492. PLR1_nokeys:
  7493. ; tst.b PLR1PATH
  7494. ; beq.s PLR1_nopath
  7495. ; bsr PLR1_follow_path
  7496. ;PLR1_nopath:
  7497.  tst.b PLR1JOY
  7498.  beq.s PLR1_nojoy
  7499.  bsr PLR1_JoyStick_control
  7500. PLR1_nojoy: 
  7501.  bra.s nocontrols
  7502.  
  7503. control2:
  7504.  tst.b PLR2MOUSE
  7505.  beq.s PLR2_nomouse
  7506.  bsr PLR2_mouse_control
  7507. PLR2_nomouse:
  7508.  tst.b PLR2KEYS
  7509.  beq.s PLR2_nokeys
  7510.  bsr PLR2_keyboard_control
  7511. PLR2_nokeys:
  7512. ; tst.b PLR2PATH
  7513. ; beq.s PLR2_nopath
  7514. ; bsr PLR1_follow_path
  7515. ;PLR2_nopath:
  7516.  tst.b PLR2JOY
  7517.  beq.s PLR2_nojoy
  7518.  bsr PLR2_JoyStick_control
  7519. PLR2_nojoy: 
  7520.  
  7521.  
  7522. nocontrols:
  7523.  
  7524.  move.l #$dff000,a6
  7525.  
  7526.  cmp.b #'4',Prefsfile+1
  7527.  bne.s nomuckabout
  7528.  
  7529.  move.w #$0,d0 
  7530.  tst.b NoiseMade0LEFT
  7531.  beq.s noturnoff0
  7532.  move.w #1,d0
  7533. noturnoff0:
  7534.  tst.b NoiseMade0RIGHT
  7535.  beq.s noturnoff1
  7536.  or.w #2,d0
  7537. noturnoff1:
  7538.  tst.b NoiseMade1RIGHT
  7539.  beq.s noturnoff2
  7540.  or.w #4,d0
  7541. noturnoff2:
  7542.  tst.b NoiseMade1LEFT
  7543.  beq.s noturnoff3
  7544.  or.w #8,d0
  7545. noturnoff3:
  7546.     move.w d0,dmacon(a6)
  7547.  
  7548. nomuckabout:
  7549.  
  7550.  
  7551. ; tst.b PLR2_fire
  7552. ; beq.s firenotpressed2
  7553. ; fire was pressed last time.
  7554. ; btst #7,$bfe001
  7555. ; bne.s firenownotpressed2
  7556. ; fire is still pressed this time.
  7557. ; st PLR2_fire
  7558. ; bra dointer
  7559.  
  7560. firenownotpressed2:
  7561. ; fire has been released.
  7562. ; clr.b PLR2_fire
  7563. ; bra dointer
  7564.  
  7565. firenotpressed2
  7566.  
  7567. ; fire was not pressed last frame...
  7568.  
  7569. ; btst #7,$bfe001
  7570. ; if it has still not been pressed, go back above
  7571. ; bne.s firenownotpressed2
  7572. ; fire was not pressed last time, and was this time, so has
  7573. ; been clicked.
  7574. ; st PLR2_clicked
  7575. ; st PLR2_fire
  7576.  
  7577. dointer
  7578.  
  7579.  cmp.b #'4',Prefsfile+1
  7580.     beq fourchannel
  7581.  
  7582.  btst #1,$dff000+intreqr
  7583.     bne.s newsampbitl
  7584.  
  7585.  movem.l (a7)+,d0-d7/a0-a6
  7586.  
  7587.  moveq #0,d0
  7588.  rts
  7589.  
  7590.  
  7591. swappedem: dc.w 0
  7592.  
  7593. newsampbitl:
  7594.  
  7595.  move.w #$820f,$dff000+dmacon
  7596.  
  7597.  move.w #$200,$dff000+intreq
  7598.  
  7599. ; tst.b CHANNELDATA
  7600. ; bne nochannel0
  7601.  
  7602.  move.l pos0LEFT,a0
  7603.  move.l pos2LEFT,a1
  7604.  
  7605.  move.l #tab,a2
  7606.  
  7607.  moveq #0,d0
  7608.  moveq #0,d1
  7609.  move.b vol0left,d0
  7610.  move.b vol2left,d1
  7611.  cmp.b d1,d0
  7612.  slt swappedem
  7613.  bge.s fbig0
  7614.  
  7615. ; d1 is bigger so scale d0 and use d1
  7616. ; as audiochannel volume.
  7617.  
  7618.  exg a0,a1
  7619.  asl.w #6,d0
  7620.  divs d1,d0
  7621.  lsl.w #8,d0
  7622.  adda.w d0,a2
  7623.  move.w d1,$dff0a8
  7624.  bra.s donechan0
  7625.  
  7626. fbig0:
  7627.  tst.w d0
  7628.  beq.s donechan0
  7629.  asl.w #6,d1
  7630.  divs d0,d1
  7631.  lsl.w #8,d1
  7632.  adda.w d1,a2
  7633.  move.w d0,$dff0a8
  7634.  
  7635. donechan0:
  7636.  
  7637.  move.l Aupt0,a3
  7638.  move.l a3,$dff0a0
  7639.  move.l Auback0,Aupt0
  7640.  move.l a3,Auback0
  7641.  
  7642.  move.l Auback0,a3
  7643.  
  7644.  moveq #0,d0
  7645.  moveq #0,d1
  7646.  moveq #0,d2
  7647.  moveq #0,d3
  7648.  moveq #0,d4
  7649.  moveq #0,d5
  7650.  move.w #49,d7
  7651. loop:
  7652.  move.l (a0)+,d0
  7653.  move.b (a1)+,d1
  7654.  move.b (a1)+,d2
  7655.  move.b (a1)+,d3
  7656.  move.b (a1)+,d4
  7657.  move.b (a2,d3.w),d5
  7658.  swap d5
  7659.  move.b (a2,d1.w),d5
  7660.  asl.l #8,d5
  7661.  move.b (a2,d2.w),d5
  7662.  swap d5
  7663.  move.b (a2,d4.w),d5
  7664.  add.l d5,d0
  7665.  move.l d0,(a3)+
  7666.  dbra d7,loop
  7667.  
  7668.  tst.b swappedem
  7669.  beq.s .ok23
  7670.  exg a0,a1
  7671. .ok23:
  7672.  
  7673.  cmp.l Samp0endLEFT,a0
  7674.  blt.s .notoffendsamp1
  7675.  move.l SampleList+6*8,a0
  7676.  move.l SampleList+6*8+4,Samp0endLEFT
  7677.  move.b #63,vol0left
  7678.  st LEFTCHANDATA+1
  7679.  move.w #0,LEFTCHANDATA+2
  7680. .notoffendsamp1:
  7681.  
  7682.  cmp.l Samp2endLEFT,a1
  7683.  blt.s .notoffendsamp2
  7684.  move.l #empty,a1
  7685.  move.l #emptyend,Samp2endLEFT
  7686.  move.b #0,vol2left
  7687.  st LEFTCHANDATA+1+8
  7688.  move.w #0,LEFTCHANDATA+2+8
  7689. .notoffendsamp2:
  7690.  
  7691.  move.l a0,pos0LEFT
  7692.  move.l a1,pos2LEFT
  7693.  
  7694. nochannel0:
  7695.  
  7696.  tst.b CHANNELDATA+16
  7697.  bne nochannel1
  7698.  
  7699.  
  7700.  move.l pos0RIGHT,a0
  7701.  move.l pos2RIGHT,a1
  7702.  
  7703.  move.l Aupt1,a3
  7704.  move.l a3,$dff0b0
  7705.  move.l Auback1,Aupt1
  7706.  move.l a3,Auback1
  7707.  
  7708.  move.l #tab,a2
  7709.  
  7710.  moveq #0,d0
  7711.  moveq #0,d1
  7712.  move.b vol0right,d0
  7713.  move.b vol2right,d1
  7714.  cmp.b d1,d0
  7715.  slt swappedem
  7716.  bge.s fbig1
  7717.  
  7718. ; d1 is bigger so scale d0 and use d1
  7719. ; as audiochannel volume.
  7720.  
  7721.  exg a0,a1
  7722.  asl.w #6,d0
  7723.  divs d1,d0
  7724.  lsl.w #8,d0
  7725.  adda.w d0,a2
  7726.  move.w d1,$dff0b8
  7727.  bra.s donechan1
  7728.  
  7729. fbig1:
  7730.  tst.w d0
  7731.  beq.s donechan1
  7732.  asl.w #6,d1
  7733.  divs d0,d1
  7734.  lsl.w #8,d1
  7735.  adda.w d1,a2
  7736.  move.w d0,$dff0b8
  7737.  
  7738. donechan1:
  7739.  moveq #0,d0
  7740.  moveq #0,d1
  7741.  moveq #0,d2
  7742.  moveq #0,d3
  7743.  moveq #0,d4
  7744.  moveq #0,d5
  7745.  move.w #49,d7
  7746. loop2:
  7747.  move.l (a0)+,d0
  7748.  move.b (a1)+,d1
  7749.  move.b (a1)+,d2
  7750.  move.b (a1)+,d3
  7751.  move.b (a1)+,d4
  7752.  move.b (a2,d3.w),d5
  7753.  swap d5
  7754.  move.b (a2,d1.w),d5
  7755.  asl.l #8,d5
  7756.  move.b (a2,d2.w),d5
  7757.  swap d5
  7758.  move.b (a2,d4.w),d5
  7759.  add.l d5,d0
  7760.  move.l d0,(a3)+
  7761.  dbra d7,loop2
  7762.  
  7763.  tst.b swappedem
  7764.  beq.s ok01
  7765.  exg a0,a1
  7766. ok01:
  7767.  
  7768.  cmp.l Samp0endRIGHT,a0
  7769.  blt.s .notoffendsamp1
  7770.  move.l #empty,a0
  7771.  move.l #emptyend,Samp0endRIGHT
  7772.  move.b #0,vol0right
  7773.  st RIGHTCHANDATA+1
  7774.  move.w #0,RIGHTCHANDATA+2
  7775. .notoffendsamp1:
  7776.  
  7777.  cmp.l Samp2endRIGHT,a1
  7778.  blt.s .notoffendsamp2
  7779.  move.l #empty,a1
  7780.  move.l #emptyend,Samp2endRIGHT
  7781.  move.b #0,vol2right
  7782.  st RIGHTCHANDATA+1+8
  7783.  move.w #0,RIGHTCHANDATA+2+8
  7784. .notoffendsamp2:
  7785.  
  7786.  move.l a0,pos0RIGHT
  7787.  move.l a1,pos2RIGHT
  7788.  
  7789. nochannel1:
  7790.  
  7791. ******************* Other two channels
  7792.  
  7793.  move.l pos1LEFT,a0
  7794.  move.l pos3LEFT,a1
  7795.  
  7796.  move.l #tab,a2
  7797.  
  7798.  moveq #0,d0
  7799.  moveq #0,d1
  7800.  move.b vol1left,d0
  7801.  move.b vol3left,d1
  7802.  cmp.b d1,d0
  7803.  slt swappedem
  7804.  bge.s fbig2
  7805.  
  7806. ; d1 is bigger so scale d0 and use d1
  7807. ; as audiochannel volume.
  7808.  
  7809.  exg a0,a1
  7810.  asl.w #6,d0
  7811.  divs d1,d0
  7812.  lsl.w #8,d0
  7813.  adda.w d0,a2
  7814.  move.w d1,$dff0d8
  7815.  bra.s donechan2
  7816.  
  7817. fbig2:
  7818.  tst.w d0
  7819.  beq.s donechan2
  7820.  asl.w #6,d1
  7821.  divs d0,d1
  7822.  lsl.w #8,d1
  7823.  adda.w d1,a2
  7824.  move.w d0,$dff0d8
  7825.  
  7826. donechan2:
  7827.  
  7828.  move.l Aupt2,a3
  7829.  move.l a3,$dff0d0
  7830.  move.l Auback2,Aupt2
  7831.  move.l a3,Auback2
  7832.  
  7833.  moveq #0,d0
  7834.  moveq #0,d1
  7835.  moveq #0,d2
  7836.  moveq #0,d3
  7837.  moveq #0,d4
  7838.  moveq #0,d5
  7839.  move.w #49,d7
  7840. loop3:
  7841.  move.l (a0)+,d0
  7842.  move.b (a1)+,d1
  7843.  move.b (a1)+,d2
  7844.  move.b (a1)+,d3
  7845.  move.b (a1)+,d4
  7846.  move.b (a2,d3.w),d5
  7847.  swap d5
  7848.  move.b (a2,d1.w),d5
  7849.  asl.l #8,d5
  7850.  move.b (a2,d2.w),d5
  7851.  swap d5
  7852.  move.b (a2,d4.w),d5
  7853.  add.l d5,d0
  7854.  move.l d0,(a3)+
  7855.  dbra d7,loop3
  7856.  
  7857.  tst.b swappedem
  7858.  beq.s .ok23
  7859.  exg a0,a1
  7860. .ok23:
  7861.  
  7862.  cmp.l Samp1endLEFT,a0
  7863.  blt.s .notoffendsamp3
  7864.  move.l #empty,a0
  7865.  move.l #emptyend,Samp1endLEFT
  7866.  move.b #0,vol1left
  7867.  st LEFTCHANDATA+1+4
  7868.  move.w #0,LEFTCHANDATA+2+4
  7869. .notoffendsamp3:
  7870.  
  7871.  cmp.l Samp3endLEFT,a1
  7872.  blt.s .notoffendsamp4
  7873.  move.l #empty,a1
  7874.  move.l #emptyend,Samp3endLEFT
  7875.  move.b #0,vol3left
  7876.  st LEFTCHANDATA+1+12
  7877.  move.w #0,LEFTCHANDATA+2+12
  7878. .notoffendsamp4:
  7879.  
  7880.  move.l a0,pos1LEFT
  7881.  move.l a1,pos3LEFT
  7882.  
  7883.  move.l pos1RIGHT,a0
  7884.  move.l pos3RIGHT,a1
  7885.  
  7886.  move.l Aupt3,a3
  7887.  move.l a3,$dff0c0
  7888.  move.l Auback3,Aupt3
  7889.  move.l a3,Auback3
  7890.  
  7891.  move.l #tab,a2
  7892.  
  7893.  moveq #0,d0
  7894.  moveq #0,d1
  7895.  move.b vol1right,d0
  7896.  move.b vol3right,d1
  7897.  cmp.b d1,d0
  7898.  slt.s swappedem
  7899.  bge.s fbig3
  7900.  
  7901.  exg a0,a1
  7902.  asl.w #6,d0
  7903.  divs d1,d0
  7904.  lsl.w #8,d0
  7905.  adda.w d0,a2
  7906.  move.w d1,$dff0c8
  7907.  bra.s donechan3
  7908.  
  7909. fbig3:
  7910.  tst.w d0
  7911.  beq.s donechan3
  7912.  asl.w #6,d1
  7913.  divs d0,d1
  7914.  lsl.w #8,d1
  7915.  adda.w d1,a2
  7916.  move.w d0,$dff0c8
  7917. donechan3:
  7918.  
  7919.  moveq #0,d0
  7920.  moveq #0,d1
  7921.  moveq #0,d2
  7922.  moveq #0,d3
  7923.  moveq #0,d4
  7924.  moveq #0,d5
  7925.  move.w #49,d7
  7926. loop4:
  7927.  move.l (a0)+,d0
  7928.  move.b (a1)+,d1
  7929.  move.b (a1)+,d2
  7930.  move.b (a1)+,d3
  7931.  move.b (a1)+,d4
  7932.  move.b (a2,d3.w),d5
  7933.  swap d5
  7934.  move.b (a2,d1.w),d5
  7935.  asl.l #8,d5
  7936.  move.b (a2,d2.w),d5
  7937.  swap d5
  7938.  move.b (a2,d4.w),d5
  7939.  add.l d5,d0
  7940.  move.l d0,(a3)+
  7941.  dbra d7,loop4
  7942.  
  7943.  tst.b swappedem
  7944.  beq.s .ok23
  7945.  exg a0,a1
  7946. .ok23:
  7947.  
  7948.  cmp.l Samp1endRIGHT,a0
  7949.  blt.s notoffendsamp3
  7950.  move.l #empty,a0
  7951.  move.l #emptyend,Samp1endRIGHT
  7952.  move.b #0,vol1right
  7953.  st RIGHTCHANDATA+1+4
  7954.  move.w #0,RIGHTCHANDATA+2+4
  7955. notoffendsamp3:
  7956.  
  7957.  cmp.l Samp3endRIGHT,a1
  7958.  blt.s notoffendsamp4
  7959.  move.l #empty,a1
  7960.  move.l #emptyend,Samp3endRIGHT
  7961.  move.b #0,vol3right
  7962.  st RIGHTCHANDATA+1+12
  7963.  move.w #0,RIGHTCHANDATA+2+12
  7964. notoffendsamp4:
  7965.  
  7966.  move.l a0,pos1RIGHT
  7967.  move.l a1,pos3RIGHT
  7968.  
  7969.  movem.l (a7)+,d0-d7/a0-a6
  7970.  tst.b counting
  7971.  beq .nostartcounter
  7972.  JSR STARTCOUNT
  7973. .nostartcounter:
  7974.  
  7975.  moveq #0,d0
  7976.  rts
  7977.  
  7978. ***********************************
  7979. * 4 channel sound routine
  7980. ***********************************
  7981.  
  7982. fourchannel:
  7983.  
  7984.  move.l #$dff000,a6
  7985.  
  7986.  btst #7,intreqrl(a6)
  7987.  beq.s nofinish0
  7988. ; move.w #0,LEFTCHANDATA+2
  7989. ; st LEFTCHANDATA+1
  7990.  move.l #null,$a0(a6)
  7991.  move.w #100,$a4(a6) 
  7992.  move.w #$0080,intreq(a6)
  7993. nofinish0:
  7994.  
  7995.  tst.b NoiseMade0pLEFT
  7996.  beq.s NoChan0sound
  7997.  
  7998.  move.l Samp0endLEFT,d0
  7999.  move.l pos0LEFT,d1
  8000.  sub.l d1,d0
  8001.  lsr.l #1,d0
  8002.  move.w d0,$a4(a6)
  8003.  move.l d1,$a0(a6)
  8004.  move.w #$8201,dmacon(a6)
  8005.  moveq #0,d0
  8006.  move.b vol0left,d0
  8007.  move.w d0,$a8(a6)
  8008.  
  8009. NoChan0sound:
  8010.  
  8011. *****************************************
  8012. *****************************************
  8013.  
  8014.  btst #0,intreqr(a6)
  8015.  beq.s nofinish1
  8016.  move.l #null,$b0(a6)
  8017.  move.w #100,$b4(a6)
  8018.  move.w #$0100,intreq(a6)
  8019. nofinish1:
  8020.  
  8021.  tst.b NoiseMade0pRIGHT
  8022.  beq.s NoChan1sound
  8023.  
  8024.  move.l Samp0endRIGHT,d0
  8025.  move.l pos0RIGHT,d1
  8026.  sub.l d1,d0
  8027.  lsr.l #1,d0
  8028.  move.w d0,$b4(a6)
  8029.  move.l d1,$b0(a6)
  8030.  move.w d0,playnull1
  8031.  move.w #$8202,dmacon(a6)
  8032.  moveq #0,d0
  8033.  move.b vol0right,d0
  8034.  move.w d0,$b8(a6)
  8035.  
  8036. NoChan1sound:
  8037.  
  8038. *****************************************
  8039. *****************************************
  8040.  
  8041.  btst #1,intreqr(a6)
  8042.  beq.s nofinish2
  8043.  move.l #null,$c0(a6)
  8044.  move.w #100,$c4(a6)
  8045.  move.w #$0200,intreq(a6)
  8046. nofinish2:
  8047.  
  8048.  tst.b NoiseMade1pRIGHT
  8049.  beq.s NoChan2sound
  8050.  
  8051.  move.l Samp1endRIGHT,d0
  8052.  move.l pos1RIGHT,d1
  8053.  sub.l d1,d0
  8054.  lsr.l #1,d0
  8055.  move.w d0,$c4(a6)
  8056.  move.w d0,playnull2
  8057.  
  8058.  move.l d1,$c0(a6)
  8059.  move.w #$8204,dmacon(a6)
  8060.  moveq #0,d0
  8061.  move.b vol1right,d0
  8062.  move.w d0,$c8(a6)
  8063.  
  8064. NoChan2sound:
  8065.  
  8066. *****************************************
  8067. *****************************************
  8068.  
  8069.  btst #2,intreqr(a6)
  8070.  beq.s nofinish3
  8071.  move.l #null,$d0(a6)
  8072.  move.w #100,$d4(a6)
  8073.  move.w #$0400,intreq(a6)
  8074. nofinish3:
  8075.  
  8076.  tst.b NoiseMade1pLEFT
  8077.  beq.s NoChan3sound
  8078.  
  8079.  move.l Samp1endLEFT,d0
  8080.  move.l pos1LEFT,d1
  8081.  sub.l d1,d0
  8082.  lsr.l #1,d0
  8083.  move.w d0,$d4(a6)
  8084.  move.w d0,playnull3
  8085.  move.l d1,$d0(a6)
  8086.  move.w #$8208,dmacon(a6)
  8087.  moveq #0,d0
  8088.  move.b vol1left,d0
  8089.  move.w d0,$d8(a6)
  8090.  
  8091. NoChan3sound:
  8092.  
  8093. nomorechannels:
  8094.  
  8095.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  8096.  move.l #0,NoiseMade0LEFT
  8097.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  8098.  move.l #0,NoiseMade0RIGHT
  8099.  
  8100. ; tst.b playnull0
  8101. ; beq.s .nnul
  8102. ; sub.b #1,playnull0
  8103. ; bra.s chan0still
  8104. ;.nnul:
  8105. ;chan0still:
  8106.  
  8107.  tst.b NoiseMade0pLEFT
  8108.  bne.s chan0still
  8109.  tst.w playnull0
  8110.  beq.s nnul0
  8111.  sub.w #100,playnull0
  8112.  bra.s chan0still
  8113. nnul0:
  8114.  move.w #0,LEFTCHANDATA+2
  8115.  st LEFTCHANDATA+1
  8116. chan0still:
  8117.  
  8118.  tst.b NoiseMade0pRIGHT
  8119.  bne.s chan1still
  8120.  tst.w playnull1
  8121.  beq.s nnul1
  8122.  sub.w #100,playnull1
  8123.  bra.s chan1still
  8124. nnul1:
  8125.  move.w #0,RIGHTCHANDATA+2
  8126.  st RIGHTCHANDATA+1
  8127. chan1still:
  8128.  
  8129.  tst.b NoiseMade1pRIGHT
  8130.  bne.s chan2still
  8131.  tst.w playnull2
  8132.  beq.s nnul2
  8133.  sub.w #100,playnull2
  8134.  bra.s chan2still
  8135. nnul2:
  8136.  move.w #0,RIGHTCHANDATA+2+4
  8137.  st RIGHTCHANDATA+1+4
  8138. chan2still:
  8139.  
  8140.  tst.b NoiseMade1pLEFT
  8141.  bne.s chan3still
  8142.  tst.w playnull3
  8143.  beq.s nnul3
  8144.  sub.w #100,playnull3
  8145.  bra.s chan3still
  8146. nnul3:
  8147.  move.w #0,LEFTCHANDATA+2+4
  8148.  st LEFTCHANDATA+1+4
  8149.  
  8150. chan3still:
  8151.  
  8152.  
  8153.  movem.l (a7)+,d0-d7/a0-a6
  8154.  
  8155.  moveq #0,d0
  8156.  rts
  8157.  
  8158. backbeat: dc.w 0
  8159.  
  8160. playnull0: dc.w 0
  8161. playnull1: dc.w 0
  8162. playnull2: dc.w 0
  8163. playnull3: dc.w 0
  8164.  
  8165. Samp0endRIGHT: dc.l emptyend
  8166. Samp1endRIGHT: dc.l emptyend
  8167. Samp2endRIGHT: dc.l emptyend
  8168. Samp3endRIGHT: dc.l emptyend
  8169. Samp0endLEFT: dc.l emptyend
  8170. Samp1endLEFT: dc.l emptyend
  8171. Samp2endLEFT: dc.l emptyend
  8172. Samp3endLEFT: dc.l emptyend
  8173.  
  8174. Aupt0: dc.l null
  8175. Auback0: dc.l null+500
  8176. Aupt2: dc.l null3
  8177. Auback2: dc.l null3+500
  8178. Aupt3: dc.l null4
  8179. Auback3: dc.l null4+500
  8180. Aupt1: dc.l null2
  8181. Auback1: dc.l null2+500
  8182.  
  8183. NoiseMade0LEFT: dc.b 0
  8184. NoiseMade1LEFT: dc.b 0
  8185. NoiseMade2LEFT: dc.b 0
  8186. NoiseMade3LEFT: dc.b 0
  8187. NoiseMade0pLEFT: dc.b 0
  8188. NoiseMade1pLEFT: dc.b 0
  8189. NoiseMade2pLEFT: dc.b 0
  8190. NoiseMade3pLEFT: dc.b 0
  8191. NoiseMade0RIGHT: dc.b 0
  8192. NoiseMade1RIGHT: dc.b 0
  8193. NoiseMade2RIGHT: dc.b 0
  8194. NoiseMade3RIGHT: dc.b 0
  8195. NoiseMade0pRIGHT: dc.b 0
  8196. NoiseMade1pRIGHT: dc.b 0
  8197. NoiseMade2pRIGHT: dc.b 0
  8198. NoiseMade3pRIGHT: dc.b 0
  8199.  
  8200. empty: ds.l 100
  8201. emptyend:
  8202.  
  8203. **************************************
  8204. * I want a routine to calculate all the
  8205. * info needed for the sound player to
  8206. * work, given say position of noise, volume
  8207. * and sample number.
  8208.  
  8209. Samplenum: dc.w 0
  8210. Noisex: dc.w 0
  8211. Noisez: dc.w 0
  8212. Noisevol: dc.w 0
  8213. chanpick: dc.w 0
  8214. IDNUM: dc.w 0
  8215. needleft: dc.b 0
  8216. needright: dc.b 0
  8217. STEREO: dc.b $0
  8218. even
  8219. prot6: dc.w 0
  8220.  
  8221.  even
  8222.  
  8223. CHANNELDATA:
  8224. LEFTCHANDATA:
  8225.  dc.l $00000000
  8226.  dc.l $00000000
  8227.  dc.l $FF000000
  8228.  dc.l $FF000000
  8229. RIGHTCHANDATA:
  8230.  dc.l $00000000
  8231.  dc.l $00000000
  8232.  dc.l $FF000000
  8233.  dc.l $FF000000
  8234.  
  8235. RIGHTPLAYEDTAB: ds.l 20
  8236. LEFTPLAYEDTAB: ds.l 20
  8237.  
  8238. MakeSomeNoise:
  8239.  
  8240. ; Plan for new sound handler:
  8241. ; It is sent a sample number,
  8242. ; a position relative to the
  8243. ; player, an id number and a volume.
  8244. ; Also notifplaying.
  8245.  
  8246. ; indirect inputs are the available
  8247. ; channel flags and whether or not
  8248. ; stereo sound is selected.
  8249.  
  8250. ; the algorithm must decide
  8251. ; whether the new sound is more
  8252. ; important than the ones already
  8253. ; playing. Thus an 'importance'
  8254. ; must be calculated, probably
  8255. ; using volume.
  8256.  
  8257. ; The output needs to be:
  8258.  
  8259. ; Write the pointers and volumes of
  8260. ; the sound channels
  8261.  
  8262.  
  8263.  tst.b notifplaying
  8264.  beq.s dontworry
  8265.  
  8266. ; find if we are already playing
  8267.  
  8268.  move.b IDNUM,d0
  8269.  move.w #7,d1
  8270.  lea CHANNELDATA,a3
  8271. findsameasme
  8272.  tst.b (a3)
  8273.  bne.s notavail
  8274.  cmp.b 1(a3),d0
  8275.  beq SameAsMe
  8276. notavail:
  8277.  add.w #4,a3
  8278.  dbra d1,findsameasme
  8279.  bra dontworry
  8280. SameAsMe
  8281.  rts
  8282.  
  8283. noiseloud: dc.w 0
  8284.  
  8285. dontworry:
  8286.  
  8287. ; Ok its fine for us to play a sound.
  8288. ; So calculate left/right volume.
  8289.  
  8290.  move.w Noisex,d1
  8291.  muls d1,d1
  8292.  move.w Noisez,d2
  8293.  muls d2,d2
  8294.  move.w #64,d3
  8295.  move.w #32767,noiseloud
  8296.  moveq #1,d0
  8297.  add.l d1,d2
  8298.  beq pastcalc
  8299.  
  8300.  move.w #31,d0
  8301. .findhigh
  8302.  btst d0,d2
  8303.  bne .foundhigh
  8304.  dbra d0,.findhigh
  8305. .foundhigh
  8306.  asr.w #1,d0
  8307.  clr.l d3
  8308.  bset d0,d3
  8309.  move.l d3,d0
  8310.  
  8311.  move.w d0,d3
  8312.  muls d3,d3    ; x*x
  8313.  sub.l d2,d3    ; x*x-a
  8314.  asr.l #1,d3    ; (x*x-a)/2
  8315.  divs d0,d3    ; (x*x-a)/2x
  8316.  sub.w d3,d0    ; second approx
  8317.  bgt .stillnot0
  8318.  move.w #1,d0
  8319. .stillnot0
  8320.  
  8321.  move.w d0,d3
  8322.  muls d3,d3
  8323.  sub.l d2,d3
  8324.  asr.l #1,d3
  8325.  divs d0,d3
  8326.  sub.w d3,d0    ; second approx
  8327.  bgt .stillnot02
  8328.  move.w #1,d0
  8329. .stillnot02
  8330.  
  8331.  move.w Noisevol,d3
  8332.  ext.l d3
  8333.  asl.l #6,d3
  8334.  cmp.l #32767,d3
  8335.  ble.s .nnnn
  8336.  move.l #32767,d3
  8337. .nnnn
  8338.  
  8339.  asr.w #2,d0
  8340.  addq #1,d0
  8341.  divs d0,d3
  8342.  
  8343.  move.w d3,noiseloud
  8344.  
  8345.  cmp.w #64,d3
  8346.  ble.s notooloud
  8347.  move.w #64,d3
  8348. notooloud:
  8349.  
  8350. pastcalc:
  8351.  
  8352.     ; d3 contains volume of noise.
  8353.     
  8354.  move.w d3,d4
  8355.  
  8356.  move.w d3,d2
  8357.  muls Noisex,d2
  8358.  asl.w #3,d0
  8359.  divs d0,d2
  8360.  
  8361.  bgt.s quietleft
  8362.  add.w d2,d4
  8363.  bge.s donequiet
  8364.  move.w #0,d4
  8365.  bra.s donequiet
  8366. quietleft:
  8367.  sub.w d2,d3
  8368.  bge.s donequiet
  8369.  move.w #0,d3
  8370. donequiet:
  8371.  
  8372. ; d3=leftvol?
  8373. ; d4=rightvol?
  8374.  
  8375.  clr.w needleft
  8376.  
  8377.  cmp.b d3,d4
  8378.  bgt.s RightLouder
  8379.  
  8380. ; Left is louder; is it MUCH louder?
  8381.  
  8382.  st needleft
  8383.  move.w d3,d2
  8384.  sub.w d4,d2
  8385.  cmp.w #32,d2
  8386.  slt needright
  8387.  bra aboutsame
  8388.  
  8389. RightLouder:
  8390.  st needright
  8391.  move.w d4,d2
  8392.  sub.w d3,d2
  8393.  cmp.w #32,d2
  8394.  slt needleft
  8395.  
  8396. aboutsame:
  8397.  
  8398.  tst.b STEREO
  8399.  beq NOSTEREO
  8400.  
  8401. ; Find least important sound on left
  8402.  
  8403.  move.l #0,a2
  8404.  move.l #0,d5
  8405.  move.w #32767,d2
  8406.  move.b IDNUM,d0
  8407.  lea LEFTCHANDATA,a3
  8408.  move.w #3,d1
  8409. FindLeftChannel
  8410.  tst.b (a3)
  8411.  bne.s .notactive
  8412.  cmp.b 1(a3),d0
  8413.  beq.s FOUNDLEFT
  8414.  cmp.w 2(a3),d2
  8415.  blt.s .notactive
  8416.  move.w 2(a3),d2
  8417.  move.l a3,a2
  8418.  move.w d5,d6
  8419.  
  8420. .notactive:
  8421.  add.w #4,a3
  8422.  add.w #1,d5
  8423.  dbra d1,FindLeftChannel
  8424.  move.l a2,a3
  8425.  bra.s gopastleft
  8426. FOUNDLEFT:
  8427.  move.w d5,d6
  8428. gopastleft:
  8429.  tst.l a3
  8430.  bne.s FOUNDALEFT
  8431.  rts
  8432. FOUNDALEFT:
  8433.  
  8434. ; d6 = channel number
  8435.  move.b d0,1(a3)
  8436.  move.w d3,2(a3)
  8437.  
  8438.  move.w Samplenum,d5
  8439.  move.l #SampleList,a3
  8440.  move.l (a3,d5.w*8),a1
  8441.  move.l 4(a3,d5.w*8),a2
  8442.  
  8443.  tst.b d6
  8444.  seq NoiseMade0LEFT
  8445.  beq.s .chan0
  8446.  cmp.b #2,d6
  8447.  slt NoiseMade1LEFT
  8448.  blt .chan1
  8449.  seq NoiseMade2LEFT
  8450.  beq .chan2
  8451.  st NoiseMade3LEFT
  8452.  
  8453.  move.b d5,LEFTPLAYEDTAB+9
  8454.  move.b d3,LEFTPLAYEDTAB+1+9
  8455.  move.b d4,LEFTPLAYEDTAB+2+9
  8456.  move.b d3,vol3left
  8457.  move.l a1,pos3LEFT
  8458.  move.l a2,Samp3endLEFT
  8459.  bra dorightchan
  8460.  
  8461. .chan0: 
  8462.  move.b d5,LEFTPLAYEDTAB
  8463.  move.b d3,LEFTPLAYEDTAB+1
  8464.  move.b d4,LEFTPLAYEDTAB+2
  8465.  move.l a1,pos0LEFT
  8466.  move.l a2,Samp0endLEFT
  8467.  move.b d3,vol0left
  8468.  bra dorightchan
  8469.  
  8470. .chan1:
  8471.  move.b d5,LEFTPLAYEDTAB+3
  8472.  move.b d3,LEFTPLAYEDTAB+1+3
  8473.  move.b d4,LEFTPLAYEDTAB+2+3
  8474.  move.b d3,vol1left
  8475.  move.l a1,pos1LEFT
  8476.  move.l a2,Samp1endLEFT
  8477.  bra dorightchan
  8478.  
  8479. .chan2: 
  8480.  move.b d5,LEFTPLAYEDTAB+6
  8481.  move.b d3,LEFTPLAYEDTAB+1+6
  8482.  move.b d4,LEFTPLAYEDTAB+2+6
  8483.  move.l a1,pos2LEFT
  8484.  move.l a2,Samp2endLEFT
  8485.  move.b d3,vol2left
  8486.  
  8487. dorightchan:
  8488.  
  8489. ; Find least important sound on right
  8490.  
  8491.  move.l #0,a2
  8492.  move.l #0,d5
  8493.  move.w #10000,d2
  8494.  move.b IDNUM,d0
  8495.  lea RIGHTCHANDATA,a3
  8496.  move.w #3,d1
  8497. FindRightChannel
  8498.  tst.b (a3)
  8499.  bne.s .notactive
  8500.  cmp.b 1(a3),d0
  8501.  beq.s FOUNDRIGHT
  8502.  cmp.w 2(a3),d2
  8503.  blt.s .notactive
  8504.  move.w 2(a3),d2
  8505.  move.l a3,a2
  8506.  move.w d5,d6
  8507.  
  8508. .notactive:
  8509.  add.w #4,a3
  8510.  add.w #1,d5
  8511.  dbra d1,FindRightChannel
  8512.  move.l a2,a3
  8513.  bra.s gopastright
  8514. FOUNDRIGHT:
  8515.  move.w d5,d6
  8516. gopastright:
  8517.  tst.l a3
  8518.  bne.s FOUNDARIGHT
  8519.  rts
  8520. FOUNDARIGHT:
  8521.  
  8522. ; d6 = channel number
  8523.  move.b d0,1(a3)
  8524.  move.w d3,2(a3)
  8525.  
  8526.  move.w Samplenum,d5
  8527.  move.l #SampleList,a3
  8528.  move.l (a3,d5.w*8),a1
  8529.  move.l 4(a3,d5.w*8),a2
  8530.  
  8531.  tst.b d6
  8532.  seq NoiseMade0RIGHT
  8533.  beq.s .chan0
  8534.  cmp.b #2,d6
  8535.  slt NoiseMade1RIGHT
  8536.  blt .chan1
  8537.  seq NoiseMade2RIGHT
  8538.  beq .chan2
  8539.  st NoiseMade3RIGHT
  8540.  
  8541.  move.b d5,RIGHTPLAYEDTAB+9
  8542.  move.b d3,RIGHTPLAYEDTAB+1+9
  8543.  move.b d4,RIGHTPLAYEDTAB+2+9
  8544.  move.b d4,vol3right
  8545.  move.l a1,pos3RIGHT
  8546.  move.l a2,Samp3endRIGHT
  8547.  rts
  8548.  
  8549. .chan0: 
  8550.  move.b d5,RIGHTPLAYEDTAB
  8551.  move.b d3,RIGHTPLAYEDTAB+1
  8552.  move.b d4,RIGHTPLAYEDTAB+2
  8553.  move.l a1,pos0RIGHT
  8554.  move.l a2,Samp0endRIGHT
  8555.  move.b d4,vol0right
  8556.  rts
  8557.  
  8558. .chan1:
  8559.  move.b d5,RIGHTPLAYEDTAB+3
  8560.  move.b d3,RIGHTPLAYEDTAB+1+3
  8561.  move.b d4,RIGHTPLAYEDTAB+2+3
  8562.  move.b d3,vol1right
  8563.  move.l a1,pos1RIGHT
  8564.  move.l a2,Samp1endRIGHT
  8565.  rts
  8566.  
  8567. .chan2: 
  8568.  move.b d5,RIGHTPLAYEDTAB+6
  8569.  move.b d3,RIGHTPLAYEDTAB+1+6
  8570.  move.b d4,RIGHTPLAYEDTAB+2+6
  8571.  move.l a1,pos2RIGHT
  8572.  move.l a2,Samp2endRIGHT
  8573.  move.b d3,vol2right
  8574.  rts
  8575.  
  8576. NOSTEREO:
  8577.  move.l #0,a2
  8578.  move.l #-1,d5
  8579.  move.w #32767,d2
  8580.  move.b IDNUM,d0
  8581.  lea CHANNELDATA,a3
  8582.  move.w #7,d1
  8583. FindChannel
  8584.  tst.b (a3)
  8585.  bne.s .notactive
  8586.  cmp.b 1(a3),d0
  8587.  beq.s FOUNDCHAN
  8588.  cmp.w 2(a3),d2
  8589.  blt.s .notactive
  8590.  move.w 2(a3),d2
  8591.  move.l a3,a2
  8592.  move.w d5,d6
  8593.  add.w #1,d6
  8594.  
  8595. .notactive:
  8596.  add.w #4,a3
  8597.  add.w #1,d5
  8598.  dbra d1,FindChannel
  8599.  
  8600.  move.l a2,a3
  8601.  bra.s gopastchan
  8602. FOUNDCHAN:
  8603.  move.w d5,d6
  8604.  add.w #1,d6
  8605. gopastchan:
  8606.  tst.w d6
  8607.  bge.s FOUNDACHAN
  8608. tooquiet:
  8609.  rts
  8610. FOUNDACHAN:
  8611.  
  8612. ; d6 = channel number
  8613.  
  8614.  cmp.w noiseloud,d2
  8615.  bgt.s tooquiet
  8616.  
  8617.  move.b d0,1(a3)
  8618.  move.w noiseloud,2(a3)
  8619.  
  8620.  move.w Samplenum,d5
  8621.  move.l #SampleList,a3
  8622.  move.l (a3,d5.w*8),a1
  8623.  move.l 4(a3,d5.w*8),a2
  8624.  
  8625.  tst.b d6
  8626.  beq .chan0
  8627.  cmp.b #2,d6
  8628.  blt .chan1
  8629.  beq .chan2
  8630.  cmp.b #4,d6
  8631.  blt .chan3
  8632.  beq .chan4
  8633.  cmp.b #6,d6
  8634.  blt .chan5
  8635.  beq .chan6
  8636.  st NoiseMade3RIGHT
  8637.  
  8638.  move.b d5,RIGHTPLAYEDTAB+9
  8639.  move.b d3,RIGHTPLAYEDTAB+1+9
  8640.  move.b d4,RIGHTPLAYEDTAB+2+9
  8641.  move.b d4,vol3right
  8642.  move.l a1,pos3RIGHT
  8643.  move.l a2,Samp3endRIGHT
  8644.  rts
  8645.  
  8646. .chan3:
  8647.  st NoiseMade3LEFT
  8648.  move.b d5,LEFTPLAYEDTAB+9
  8649.  move.b d3,LEFTPLAYEDTAB+1+9
  8650.  move.b d4,LEFTPLAYEDTAB+2+9
  8651.  move.b d3,vol3left
  8652.  move.l a1,pos3LEFT
  8653.  move.l a2,Samp3endLEFT
  8654.  bra dorightchan
  8655.  
  8656. .chan0: 
  8657.  st NoiseMade0LEFT
  8658.  move.b d5,LEFTPLAYEDTAB
  8659.  move.b d3,LEFTPLAYEDTAB+1
  8660.  move.b d4,LEFTPLAYEDTAB+2
  8661.  move.l a1,pos0LEFT
  8662.  move.l a2,Samp0endLEFT
  8663.  move.b d3,vol0left
  8664.  rts
  8665.  
  8666. .chan1:
  8667.  st NoiseMade1LEFT
  8668.  move.b d5,LEFTPLAYEDTAB+3
  8669.  move.b d3,LEFTPLAYEDTAB+1+3
  8670.  move.b d4,LEFTPLAYEDTAB+2+3
  8671.  move.b d3,vol1left
  8672.  move.l a1,pos1LEFT
  8673.  move.l a2,Samp1endLEFT
  8674.  rts
  8675.  
  8676. .chan2: 
  8677.  st NoiseMade2LEFT
  8678.  move.b d5,LEFTPLAYEDTAB+6
  8679.  move.b d3,LEFTPLAYEDTAB+1+6
  8680.  move.b d4,LEFTPLAYEDTAB+2+6
  8681.  move.l a1,pos2LEFT
  8682.  move.l a2,Samp2endLEFT
  8683.  move.b d3,vol2left
  8684.  rts
  8685.  
  8686. .chan4: 
  8687.  st NoiseMade0RIGHT
  8688.  move.b d5,RIGHTPLAYEDTAB
  8689.  move.b d3,RIGHTPLAYEDTAB+1
  8690.  move.b d4,RIGHTPLAYEDTAB+2
  8691.  move.l a1,pos0RIGHT
  8692.  move.l a2,Samp0endRIGHT
  8693.  move.b d4,vol0right
  8694.  rts
  8695.  
  8696. .chan5:
  8697.  st NoiseMade1RIGHT
  8698.  move.b d5,RIGHTPLAYEDTAB+3
  8699.  move.b d3,RIGHTPLAYEDTAB+1+3
  8700.  move.b d4,RIGHTPLAYEDTAB+2+3
  8701.  move.b d3,vol1right
  8702.  move.l a1,pos1RIGHT
  8703.  move.l a2,Samp1endRIGHT
  8704.  rts
  8705.  
  8706. .chan6: 
  8707.  st NoiseMade2RIGHT
  8708.  move.b d5,RIGHTPLAYEDTAB+6
  8709.  move.b d3,RIGHTPLAYEDTAB+1+6
  8710.  move.b d4,RIGHTPLAYEDTAB+2+6
  8711.  move.l a1,pos2RIGHT
  8712.  move.l a2,Samp2endRIGHT
  8713.  move.b d3,vol2right
  8714.  rts
  8715.  
  8716. SampleList:
  8717.  dc.l Scream,EndScream
  8718.  dc.l Shoot,EndShoot
  8719.  dc.l Munch,EndMunch
  8720.  dc.l PooGun,EndPooGun
  8721.  dc.l Collect,EndCollect
  8722. ;5
  8723.  dc.l DoorNoise,EndDoorNoise
  8724.  dc.l 0,0
  8725.  dc.l Stomp,EndStomp
  8726.  dc.l LowScream,EndLowScream
  8727.  dc.l BaddieGun,EndBaddieGun
  8728. ;10
  8729.  dc.l SwitchNoise,EndSwitch
  8730.  dc.l Reload,EndReload
  8731.  dc.l NoAmmo,EndNoAmmo
  8732.  dc.l Splotch,EndSplotch
  8733.  dc.l SplatPop,EndSplatPop
  8734. ;15
  8735.  dc.l Boom,EndBoom
  8736.  dc.l Hiss,EndHiss
  8737.  dc.l Howl1,EndHowl1
  8738.  dc.l Howl2,EndHowl2
  8739.  dc.l Pant,EndPant
  8740. ;20
  8741.  dc.l Whoosh,EndWhoosh
  8742.  dc.l ROAR,EndROAR
  8743.  dc.l whoosh,Endwhoosh
  8744.  dc.l 0,0
  8745.  dc.l 0,0
  8746.  dc.l 0,0
  8747.  dc.l 0,0
  8748.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8749.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8750.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8751.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8752.  
  8753.  dc.l 0
  8754.  
  8755. storeval: dc.w 0
  8756.  
  8757.  include "ab3:source/wallchunk.s"
  8758.  include "ab3:source/loadfromdisk.s"
  8759.  include "ab3:source/screensetup.s"
  8760.  include "ab3:source/CONTROLLOOP.s"
  8761.  
  8762.  
  8763.  
  8764.  
  8765. saveinters:  
  8766.  dc.w 0
  8767.  
  8768. z: dc.w 10
  8769.  
  8770. notifplaying:
  8771.  dc.w 0
  8772.  
  8773. audpos1: dc.w 0
  8774. audpos1b: dc.w 0
  8775. audpos2: dc.w 0
  8776. audpos2b: dc.w 0
  8777. audpos3: dc.w 0
  8778. audpos3b: dc.w 0
  8779. audpos4: dc.w 0
  8780. audpos4b: dc.w 0
  8781.  
  8782. vol0left: dc.w 0
  8783. vol0right: dc.w 0
  8784. vol1left: dc.w 0
  8785. vol1right: dc.w 0
  8786. vol2left: dc.w 0
  8787. vol2right: dc.w 0
  8788. vol3left: dc.w 0
  8789. vol3right: dc.w 0
  8790.  
  8791. pos: dc.l 0
  8792.  
  8793. pos0LEFT: dc.l empty
  8794. pos1LEFT: dc.l empty
  8795. pos2LEFT: dc.l empty
  8796. pos3LEFT: dc.l empty
  8797. pos0RIGHT: dc.l empty
  8798. pos1RIGHT: dc.l empty
  8799. pos2RIGHT: dc.l empty
  8800. pos3RIGHT: dc.l empty
  8801.  
  8802. numtodo dc.w 0
  8803.  
  8804. npt: dc.w 0
  8805.  
  8806. pretab:
  8807. val SET 0
  8808.  REPT 128
  8809.  dc.b val
  8810. val SET val+1
  8811.  ENDR
  8812. val SET -128
  8813.  REPT 128
  8814.  dc.b val
  8815. val SET val+1
  8816.  ENDR 
  8817.  
  8818. tab:
  8819.  ds.b 256*65
  8820.  
  8821.  
  8822. test: dc.l 0
  8823.  ds.l 30
  8824.  
  8825.  even
  8826. ConstCols:
  8827. ; incbin "ConstCols"
  8828.  even
  8829. Smoothscalecols:
  8830. ; incbin "smoothbumppalscaled"
  8831.  even
  8832. SmoothTile:
  8833. ; incbin "smoothbumptile"
  8834.  even
  8835. Bumpscalecols:
  8836. ; incbin "Bumppalscaled"
  8837.  even
  8838. Bumptile:
  8839. ; incbin "bumptile"
  8840.  even
  8841. scalecols: ;incbin "bytepixpalscaled"
  8842.  even
  8843. floorscalecols:
  8844.  incbin "floorpalscaled"
  8845.  ds.w 256*4
  8846.  
  8847.  even
  8848. PaletteAddr: dc.l 0
  8849. ChunkAddr: dc.l 0
  8850. ;walltiles:
  8851. ; dc.l GreenMechanicWALL
  8852. ; dc.l BlueGreyMetalWALL
  8853. ; dc.l TechnoDetailWALL
  8854. ; dc.l BlueStoneWALL
  8855. ; dc.l RedAlertWALL
  8856. ; dc.l RockWALL
  8857. ;
  8858. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  8859. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  8860. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  8861. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  8862. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  8863. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  8864.  
  8865. floortile:
  8866.  dc.l 0
  8867. ; incbin "floortile" 
  8868.  even
  8869. wallrouts:
  8870. ; incbin "2x2WallDraw" 
  8871.  CNOP 0,64
  8872. BackPicture:
  8873.  incbin "backfile"
  8874. EndBackPicture:
  8875.  
  8876. drawpt: dc.l 0
  8877. olddrawpt: dc.l 0
  8878. frompt: dc.l 0 
  8879.  
  8880. SineTable:
  8881.  incbin "bigsine"
  8882.  
  8883. angspd: dc.w 0
  8884. flooryoff: dc.w 0
  8885. xoff: dc.l 0
  8886. yoff: dc.l 0
  8887. yvel: dc.l 0
  8888. zoff: dc.l 0
  8889. tyoff: dc.l 0
  8890. xspdval: dc.l 0
  8891. zspdval: dc.l 0
  8892. Zone: dc.w 0
  8893.  
  8894. PLR1: dc.b $ff
  8895.  even
  8896. PLR1_energy: dc.w 191
  8897. PLR1_GunSelected: dc.w 0
  8898. PLR1_cosval: dc.w 0
  8899. PLR1_sinval: dc.w 0
  8900. PLR1_angpos: dc.w 0
  8901. PLR1_angspd: dc.w 0
  8902. PLR1_xoff: dc.l 0
  8903. PLR1_yoff: dc.l 0
  8904. PLR1_yvel: dc.l 0
  8905. PLR1_zoff: dc.l 0
  8906. PLR1_tyoff: dc.l 0
  8907. PLR1_xspdval: dc.l 0
  8908. PLR1_zspdval: dc.l 0
  8909. PLR1_Zone: dc.w 0
  8910. PLR1_Roompt: dc.l 0
  8911. PLR1_OldRoompt: dc.l 0
  8912. PLR1_PointsToRotatePtr: dc.l 0
  8913. PLR1_ListOfGraphRooms: dc.l 0
  8914. PLR1_oldxoff: dc.l 0
  8915. PLR1_oldzoff: dc.l 0
  8916. PLR1_StoodInTop: dc.b 0
  8917.  even
  8918. PLR1_height: dc.l 0
  8919.  
  8920.  ds.w 4
  8921.  
  8922. OLDX1: dc.l 0
  8923. OLDX2: dc.l 0
  8924. OLDZ1: dc.l 0
  8925. OLDZ2: dc.l 0
  8926.  
  8927. XDIFF1: dc.l 0
  8928. ZDIFF1: dc.l 0
  8929. XDIFF2: dc.l 0
  8930. ZDIFF2: dc.l 0
  8931.  
  8932. PLR1s_cosval: dc.w 0
  8933. PLR1s_sinval: dc.w 0
  8934. PLR1s_angpos: dc.w 0
  8935. PLR1s_angspd: dc.w 0
  8936. PLR1s_xoff: dc.l 0
  8937. PLR1s_yoff: dc.l 0
  8938. PLR1s_yvel: dc.l 0
  8939. PLR1s_zoff: dc.l 0
  8940. PLR1s_tyoff: dc.l 0
  8941. PLR1s_xspdval: dc.l 0
  8942. PLR1s_zspdval: dc.l 0
  8943. PLR1s_Zone: dc.w 0
  8944. PLR1s_Roompt: dc.l 0
  8945. PLR1s_OldRoompt: dc.l 0
  8946. PLR1s_PointsToRotatePtr: dc.l 0
  8947. PLR1s_ListOfGraphRooms: dc.l 0
  8948. PLR1s_oldxoff: dc.l 0
  8949. PLR1s_oldzoff: dc.l 0
  8950. PLR1s_height: dc.l 0
  8951. PLR1s_targheight: dc.l 0
  8952.  
  8953. p1_xoff: dc.l 0
  8954. p1_zoff: dc.l 0
  8955. p1_yoff: dc.l 0
  8956. p1_height: dc.l 0
  8957. p1_angpos: dc.w 0
  8958. p1_bobble: dc.w 0
  8959. p1_clicked: dc.b 0
  8960. p1_spctap: dc.b 0
  8961. p1_ducked: dc.b 0
  8962. p1_gunselected: dc.b 0
  8963. p1_fire: dc.b 0
  8964.  even
  8965. p1_holddown: dc.w 0
  8966.  
  8967.  ds.w 4
  8968.  
  8969. PLR2: dc.b $ff
  8970.  even
  8971. PLR2_GunSelected: dc.w 0
  8972. PLR2_energy: dc.w 191
  8973. PLR2_cosval: dc.w 0
  8974. PLR2_sinval: dc.w 0
  8975. PLR2_angpos: dc.w 0
  8976. PLR2_angspd: dc.w 0
  8977. PLR2_xoff: dc.l 0
  8978. PLR2_yoff: dc.l 0
  8979. PLR2_yvel: dc.l 0
  8980. PLR2_zoff: dc.l 0
  8981. PLR2_tyoff: dc.l 0
  8982. PLR2_xspdval: dc.l 0
  8983. PLR2_zspdval: dc.l 0
  8984. PLR2_Zone: dc.w 0
  8985. PLR2_Roompt: dc.l 0
  8986. PLR2_OldRoompt: dc.l 0
  8987. PLR2_PointsToRotatePtr: dc.l 0
  8988. PLR2_ListOfGraphRooms: dc.l 0
  8989. PLR2_oldxoff: dc.l 0
  8990. PLR2_oldzoff: dc.l 0
  8991. PLR2_StoodInTop: dc.b 0
  8992.  even
  8993. PLR2_height: dc.l 0
  8994.  
  8995.  ds.w 4
  8996.  
  8997. PLR2s_cosval: dc.w 0
  8998. PLR2s_sinval: dc.w 0
  8999. PLR2s_angpos: dc.w 0
  9000. PLR2s_angspd: dc.w 0
  9001. PLR2s_xoff: dc.l 0
  9002. PLR2s_yoff: dc.l 0
  9003. PLR2s_yvel: dc.l 0
  9004. PLR2s_zoff: dc.l 0
  9005. PLR2s_tyoff: dc.l 0
  9006. PLR2s_xspdval: dc.l 0
  9007. PLR2s_zspdval: dc.l 0
  9008. PLR2s_Zone: dc.w 0
  9009. PLR2s_Roompt: dc.l 0
  9010. PLR2s_OldRoompt: dc.l 0
  9011. PLR2s_PointsToRotatePtr: dc.l 0
  9012. PLR2s_ListOfGraphRooms: dc.l 0
  9013. PLR2s_oldxoff: dc.l 0
  9014. PLR2s_oldzoff: dc.l 0
  9015. PLR2s_height: dc.l 0
  9016. PLR2s_targheight: dc.l 0
  9017.  
  9018.  ds.w 4
  9019.  
  9020. p2_xoff: dc.l 0
  9021. p2_zoff: dc.l 0
  9022. p2_yoff: dc.l 0
  9023. p2_height: dc.l 0
  9024. p2_angpos: dc.w 0
  9025. p2_bobble: dc.w 0
  9026. p2_clicked: dc.b 0
  9027. p2_spctap: dc.b 0
  9028. p2_ducked: dc.b 0
  9029. p2_gunselected: dc.b 0
  9030. p2_fire: dc.b 0
  9031.  even
  9032. p2_holddown: dc.w 0
  9033.  
  9034.  
  9035. liftanimtab:
  9036.  
  9037.  
  9038. endliftanimtab:
  9039.  
  9040. glassball:
  9041. ; incbin "glassball.inc"
  9042. endglass
  9043. glassballpt: dc.l glassball
  9044.  
  9045. rndtab: ; incbin "randfile"
  9046. endrnd: 
  9047.  
  9048. brightanimtab:
  9049.  dcb.w 200,20
  9050.  dc.w 5
  9051.  dc.w 10,20
  9052.  dc.w 5
  9053.  dcb.w 30,20
  9054.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  9055.  dcb.w 40,0
  9056.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  9057.  dcb.w 300,0
  9058.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  9059.  dc.w -1
  9060.  
  9061. Roompt: dc.l 0
  9062. OldRoompt: dc.l 0
  9063.  
  9064. *****************************************************************
  9065.  *
  9066.  include "AB3:source/LevelData2"
  9067.  *
  9068. *****************************************************************
  9069.  
  9070.  
  9071. wallpt: dc.l 0
  9072. floorpt: dc.l 0
  9073.  
  9074. Rotated:
  9075.  ds.l 2*800 
  9076. ObjRotated:
  9077.  ds.l 2*500
  9078.  
  9079. OnScreen:
  9080.  ds.l 2*800 
  9081.  
  9082. startwait: dc.w 0
  9083. endwait: dc.w 0
  9084.  
  9085. Faces:; incbin "faces2raw"
  9086.  
  9087. *******************************************************************
  9088.  
  9089. consttab:
  9090.  incbin "constantfile"
  9091.  
  9092. *******************************************************************
  9093.  
  9094.  
  9095.  
  9096. *********************************
  9097.  
  9098. ; include "ab3:source/loadmod.a"
  9099. ; include "ab3:source/proplayer.a"
  9100.  
  9101.  
  9102. darkentab: incbin "darkenedcols"
  9103. brightentab: incbin "brightenfile"
  9104. WorkSpace:
  9105.  ds.l 8192 
  9106. waterfile: incbin "waterfile"
  9107.  
  9108.  SECTION ffff,CODE_C
  9109.  
  9110. nullspr: dc.l 0
  9111.  
  9112.  cnop 0,8
  9113. borders:
  9114.  incbin "newleftbord"
  9115.  incbin "newrightbord"
  9116.  
  9117. health: incbin "healthstrip"
  9118. Ammunition: incbin "ammostrip"
  9119. healthpal: incbin "healthpal"
  9120. PanelKeys: incbin "greenkey"
  9121.  incbin "redkey"
  9122.  incbin "yellowkey"
  9123.  incbin "bluekey"
  9124.  
  9125. null: ds.w 500
  9126. null2: ds.w 500
  9127. null3: ds.w 500
  9128. null4: ds.w 500
  9129.  
  9130.  
  9131. Blurbfield:
  9132.  
  9133.  dc.w bpl1ptl
  9134. bl1l: dc.w 0
  9135.  dc.w bpl1pth
  9136. bl1h: dc.w 0
  9137.  
  9138.  dc.w diwstart,$2c81
  9139.  dc.w diwstop,$1cc1
  9140.  dc.w ddfstart,$38
  9141.  dc.w ddfstop,$b8
  9142.  dc.w bplcon0,$9201
  9143.  dc.w bplcon1,0
  9144.  dc.w $106,$c40
  9145. blcols:
  9146.  dc.w col0,0
  9147.  dc.w col1,$fff
  9148.  
  9149.  dc.w $108,0
  9150.  dc.w $10a,0
  9151.  
  9152.  dc.w $ffff,$fffe
  9153.  dc.w $ffff,$fffe
  9154.  
  9155. nullline:
  9156.  ds.b 80    
  9157.  
  9158.  include "ab3:source/titlecop.s"
  9159.  
  9160. bigfield:    
  9161.                 ; Start of our copper list.
  9162.  
  9163.  dc.w dmacon,$8020
  9164.  dc.w intreq,$8011
  9165.  dc.w $1fc,$f
  9166.  dc.w diwstart
  9167. winstart: dc.w $2cb1
  9168.  dc.w diwstop
  9169. winstop: dc.w $2c91
  9170.  dc.w ddfstart
  9171. fetchstart: dc.w $48
  9172.  dc.w ddfstop
  9173. fetchstop: dc.w $88
  9174.  
  9175. bordercols:
  9176.  incbin "borderpal"
  9177.  
  9178.  dc.w spr0ptl
  9179. s0l:
  9180.  dc.w 0
  9181.  dc.w spr0pth
  9182. s0h:
  9183.  dc.w 0
  9184.  dc.w spr1ptl
  9185. s1l:
  9186.  dc.w 0
  9187.  dc.w spr1pth
  9188. s1h:
  9189.  dc.w 0
  9190.  dc.w spr2ptl
  9191. s2l:
  9192.  dc.w 0
  9193.  dc.w spr2pth
  9194. s2h:
  9195.  dc.w 0
  9196.  dc.w spr3ptl
  9197. s3l:
  9198.  dc.w 0
  9199.  dc.w spr3pth
  9200. s3h:
  9201.  dc.w 0
  9202.  dc.w spr4ptl
  9203. s4l:
  9204.  dc.w 0
  9205.  dc.w spr4pth
  9206. s4h:
  9207.  dc.w 0
  9208.  dc.w spr5ptl
  9209. s5l:
  9210.  dc.w 0
  9211.  dc.w spr5pth
  9212. s5h:
  9213.  dc.w 0
  9214.  dc.w spr6ptl
  9215. s6l:
  9216.  dc.w 0
  9217.  dc.w spr6pth
  9218. s6h:
  9219.  dc.w 0
  9220.  dc.w spr7ptl
  9221. s7l:
  9222.  dc.w 0
  9223.  dc.w spr7pth
  9224. s7h:
  9225.  dc.w 0
  9226.  
  9227.  
  9228.  dc.w $106,$c42
  9229.  incbin "borderpal"
  9230.  
  9231.  dc.w $106,$8c42
  9232.  dc.w col0
  9233. hitcol: dc.w $0
  9234.  dc.w $106,$c42
  9235.  dc.w col0
  9236. hitcol2: dc.w 0
  9237.  
  9238.  dc.w bplcon0,$7201
  9239.  dc.w bplcon1
  9240. smoff:
  9241.  dc.w $0
  9242.  
  9243.  dc.w $108
  9244. modulo: dc.w -24
  9245.  dc.w $10a,-24
  9246.  
  9247.  dc.w bpl1pth
  9248. pl1h
  9249.  dc.w 0
  9250.  
  9251.  dc.w bpl1ptl
  9252. pl1l
  9253.  dc.w 0
  9254.  
  9255.  dc.w bpl2pth
  9256. pl2h
  9257.  dc.w 0
  9258.  
  9259.  dc.w bpl2ptl
  9260. pl2l
  9261.  dc.w 0
  9262.  
  9263.  dc.w bpl3pth
  9264. pl3h
  9265.  dc.w 0
  9266.  
  9267.  dc.w bpl3ptl
  9268. pl3l
  9269.  dc.w 0
  9270.  
  9271.  dc.w bpl4pth
  9272. pl4h
  9273.  dc.w 0
  9274.  
  9275.  dc.w bpl4ptl
  9276. pl4l
  9277.  dc.w 0
  9278.  
  9279.  dc.w bpl5pth
  9280. pl5h
  9281.  dc.w 0
  9282.  
  9283.  dc.w bpl5ptl
  9284. pl5l
  9285.  dc.w 0
  9286.  
  9287.  dc.w bpl6pth
  9288. pl6h
  9289.  dc.w 0
  9290.  
  9291.  dc.w bpl6ptl
  9292. pl6l
  9293.  dc.w 0
  9294.  
  9295.  dc.w bpl7pth
  9296. pl7h
  9297.  dc.w 0
  9298.  
  9299.  dc.w bpl7ptl
  9300. pl7l
  9301.  dc.w 0
  9302.  
  9303.  
  9304.  dc.w $1001,$ff00
  9305.  dc.w intreq,$11
  9306. yposcop:
  9307.  dc.w $2a11,$fffe
  9308.  dc.w $8a,0
  9309.  
  9310. ; ds.l 104*12
  9311.  
  9312. ;colbars:
  9313. ;val SET $2a
  9314. ; dcb.l 104*80,$1fe0000
  9315. ; dc.w $106,$c42
  9316. ; dc.w $80
  9317. ;pch1:
  9318. ; dc.w 0
  9319. ; dc.w $82
  9320. ;pcl1:
  9321. ; dc.w 0 
  9322. ; dc.w $88,0
  9323. ; dc.w $ffff,$fffe       ; End copper list.
  9324.  
  9325. ; ds.l 104*12
  9326.  
  9327. ;colbars2:
  9328. ;val SET $2a
  9329. ; dcb.l 104*80,$1fe0000
  9330. ; dc.w $106,$c42
  9331. ; dc.w $80
  9332. ;pch2:
  9333. ; dc.w 0
  9334. ; dc.w $82
  9335. ;pcl2:
  9336. ; dc.w 0
  9337. ; dc.w $88,0
  9338. ; dc.w $ffff,$fffe       ; End copper list.
  9339.  
  9340. ; ds.l 104*10
  9341.  
  9342. NullCopper:
  9343.  dc.w $ffff,$fffe
  9344.  
  9345. old: dc.l 0
  9346.  
  9347. prot5: dc.w 0
  9348. PanelCop:
  9349.  
  9350.  dc.w $80
  9351. och:
  9352.  dc.w 0
  9353.  dc.w $82
  9354. ocl:
  9355.  dc.w 0
  9356.  
  9357. statskip:
  9358.  dc.w $1fe,0
  9359.  dc.w $1fe,0
  9360.  
  9361.  dc.w $10c,0
  9362.  dc.w bplcon0,$1201
  9363.  dc.w bpl1ptl
  9364. n1l:
  9365.  dc.w 0
  9366.  dc.w bpl1pth
  9367. n1h:
  9368.  dc.w 0
  9369.  dc.w $108,-24
  9370.  incbin "Panelpal"
  9371.  
  9372.  dc.w bpl2pth
  9373. p2h
  9374.  dc.w 0
  9375.  
  9376.  dc.w bpl2ptl
  9377. p2l
  9378.  dc.w 0
  9379.  
  9380.  dc.w bpl3pth
  9381. p3h
  9382.  dc.w 0
  9383.  
  9384.  dc.w bpl3ptl
  9385. p3l
  9386.  dc.w 0
  9387.  
  9388.  dc.w bpl4pth
  9389. p4h
  9390.  dc.w 0
  9391.  dc.w bpl4ptl
  9392. p4l
  9393.  dc.w 0
  9394.  dc.w bpl5pth
  9395. p5h
  9396.  dc.w 0
  9397.  dc.w bpl5ptl
  9398. p5l
  9399.  dc.w 0
  9400.  dc.w bpl6pth
  9401. p6h
  9402.  dc.w 0
  9403.  dc.w bpl6ptl
  9404. p6l
  9405.  dc.w 0
  9406.  dc.w bpl7pth
  9407. p7h
  9408.  dc.w 0
  9409.  dc.w bpl7ptl
  9410. p7l
  9411.  dc.w 0
  9412.  dc.w bpl8pth
  9413. p8h
  9414.  dc.w 0
  9415.  dc.w bpl8ptl
  9416. p8l
  9417.  dc.w 0
  9418.  
  9419.  
  9420.  dc.w ddfstart,$38
  9421.  dc.w ddfstop,$b8
  9422.  dc.w diwstart,$2c81
  9423.  dc.w diwstop,$2cc1
  9424.  
  9425.  dc.w bplcon0
  9426. Panelcon: dc.w $0211
  9427.  dc.w bpl1pth
  9428. p1h
  9429.  dc.w 0
  9430.  
  9431.  dc.w bpl1ptl
  9432. p1l
  9433.  dc.w 0
  9434.  
  9435.  
  9436.  dc.w $108,40*7
  9437.  dc.w $10a,40*7
  9438.  
  9439.  dc.w $ffff,$fffe
  9440.  
  9441.  dc.w $180,$fff
  9442.  
  9443.  
  9444.  dc.w $f801,$ff00
  9445.  dc.w col1,$50
  9446.  dc.w $f901,$ff00
  9447.  dc.w col1,$90
  9448.  dc.w $fa01,$ff00
  9449.  dc.w col1,$f0
  9450.  dc.w $fb01,$ff00
  9451.  dc.w col1,$f0
  9452.  dc.w $fc01,$ff00
  9453.  dc.w col1,$90
  9454.  dc.w $fd01,$ff00
  9455.  dc.w col1,$50
  9456.  
  9457.  dc.w $fe01,$ff00
  9458.  dc.w col1,$fff
  9459.  
  9460.  dc.w $ffdf,$fffe
  9461.  dc.w $a01,$ff00
  9462.  dc.w bplcon0,$201
  9463.  
  9464.  incbin "faces2cols"
  9465.  dc.w bpl1pth
  9466. f1h
  9467.  dc.w 0
  9468.  
  9469.  dc.w bpl1ptl
  9470. f1l
  9471.  dc.w 0
  9472.  
  9473.  dc.w bpl2pth
  9474. f2h
  9475.  dc.w 0
  9476.  
  9477.  dc.w bpl2ptl
  9478. f2l
  9479.  dc.w 0
  9480.  
  9481.  dc.w bpl3pth
  9482. f3h
  9483.  dc.w 0
  9484.  
  9485.  dc.w bpl3ptl
  9486. f3l
  9487.  dc.w 0
  9488.  
  9489.  dc.w bpl4pth
  9490. f4h
  9491.  dc.w 0
  9492.  dc.w bpl4ptl
  9493. f4l
  9494.  dc.w 0
  9495.  
  9496.  dc.w bpl5pth
  9497. f5h
  9498.  dc.w 0
  9499.  dc.w bpl5ptl
  9500. f5l
  9501.  dc.w 0
  9502.  
  9503.  dc.w $0c01,$ff00
  9504.  dc.w bplcon0,$5201
  9505.   
  9506.  dc.w $ffff,$fffe
  9507.  
  9508.  cnop 0,64
  9509. FacePlace:
  9510. ; ds.l 6*32*5
  9511.  
  9512. TEXTSCRN: dc.l 0
  9513.  
  9514. TEXTCOP:
  9515.  dc.w intreq,$8030
  9516.  
  9517.  dc.w spr0ptl
  9518. txs0l:
  9519.  dc.w 0
  9520.  dc.w spr0pth
  9521. txs0h:
  9522.  dc.w 0
  9523.  dc.w spr1ptl
  9524. txs1l:
  9525.  dc.w 0
  9526.  dc.w spr1pth
  9527. txs1h:
  9528.  dc.w 0
  9529.  dc.w spr2ptl
  9530. txs2l:
  9531.  dc.w 0
  9532.  dc.w spr2pth
  9533. txs2h:
  9534.  dc.w 0
  9535.  dc.w spr3ptl
  9536. txs3l:
  9537.  dc.w 0
  9538.  dc.w spr3pth
  9539. txs3h:
  9540.  dc.w 0
  9541.  dc.w spr4ptl
  9542. txs4l:
  9543.  dc.w 0
  9544.  dc.w spr4pth
  9545. txs4h:
  9546.  dc.w 0
  9547.  dc.w spr5ptl
  9548. txs5l:
  9549.  dc.w 0
  9550.  dc.w spr5pth
  9551. txs5h:
  9552.  dc.w 0
  9553.  dc.w spr6ptl
  9554. txs6l:
  9555.  dc.w 0
  9556.  dc.w spr6pth
  9557. txs6h:
  9558.  dc.w 0
  9559.  dc.w spr7ptl
  9560. txs7l:
  9561.  dc.w 0
  9562.  dc.w spr7pth
  9563. txs7h:
  9564.  dc.w 0
  9565.  
  9566.  
  9567.  dc.w $10c,$0088
  9568.  
  9569.  dc.w $1fc,$f
  9570.  dc.w diwstart,$2c81    ; Top left corner of screen.
  9571.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  9572.  dc.w ddfstart,$38      ; Data fetch start.
  9573.  dc.w ddfstop,$c8       ; Data fetch stop.
  9574.  
  9575.  dc.w bplcon0
  9576. TSCP:
  9577.  dc.w $9201
  9578.  
  9579.  dc.w $106,$c40
  9580.  
  9581.  dc.w $2a01,$ff00
  9582.  
  9583.  dc.w col0,0
  9584.  dc.w col1
  9585. TOPLET:
  9586. TXTCOLL:
  9587.  dc.w 0
  9588.   dc.w col2
  9589. BOTLET:
  9590.  dc.w 0
  9591.  dc.w col3
  9592. ALLTEXT:
  9593.  dc.w $fff
  9594.  dc.w $106,$e40
  9595.  dc.w col3
  9596. ALLTEXTLOW:
  9597.  dc.w $0
  9598.  
  9599.  
  9600.  dc.w bpl1pth
  9601. TSPTh:
  9602.  dc.w 0
  9603.  dc.w bpl1ptl
  9604. TSPTl:
  9605.  dc.w 0
  9606.  
  9607.  dc.w bpl2pth
  9608. TSPTh2:
  9609.  dc.w 0
  9610.  dc.w bpl2ptl
  9611. TSPTl2:
  9612.  dc.w 0
  9613.  
  9614.  
  9615.  dc.w $108,0
  9616.  dc.w $10a,0
  9617.  
  9618.  dc.w $ffff,$fffe
  9619.  
  9620. ********************************************
  9621. * Stuff you don't have to worry about yet. *
  9622. ********************************************
  9623.  
  9624. closeeverything:
  9625.  
  9626.  jsr mt_end
  9627.  
  9628.  move.l #nullcop,d0
  9629. ; move.l old,d0
  9630.  
  9631.  move.l d0,$dff080     ; Restore old copper list.
  9632.  move.w d0,ocl
  9633.  swap d0
  9634.  move.w d0,och
  9635.  
  9636. ; move.l doslib,a6
  9637. ; move.l #4,d1
  9638. ; jsr -198(a6)
  9639.  
  9640. ; move.l doslib,d0
  9641. ; move.l d0,a1
  9642. ; move.l 4.w,a6
  9643. ; jsr CloseLib(a6)
  9644.  
  9645.  move.l #$dff000,a6
  9646.  move.w #$8020,dmacon(a6)
  9647.  move.w #$f,dmacon(a6)
  9648.  
  9649. ; move.l 4.w,a6
  9650. ; lea VBLANKInt,a1
  9651. ; moveq #INTB_COPER,d0
  9652. ; jsr _LVORemIntServer(a6)
  9653.  
  9654. ; IFEQ CD32VER
  9655. ; move.l OLDKINT,$68.w
  9656. ; ENDC
  9657. ; move.w saveinters,d0
  9658. ; or.w #$c000,d0
  9659. ; move.w d0,intena(a6)
  9660.  clr.w $dff0a8
  9661.  clr.w $dff0b8
  9662.  clr.w $dff0c8
  9663.  clr.w $dff0d8
  9664.  
  9665.  
  9666. ; move.l oldview,a1
  9667. ; move.l a1,d0
  9668. ; move.l gfxbase,a6
  9669. ; jsr -$de(a6)
  9670.  
  9671. ; cmp.b #'s',mors
  9672. ; beq.s leaveold
  9673. ; move.w #$f8e,$dff1dc
  9674. ;leaveold:
  9675.  
  9676.  jsr RELEASELEVELMEM
  9677.  jsr RELEASESCRNMEM
  9678.  
  9679.  move.l #0,d0
  9680.  
  9681.  rts
  9682.  
  9683.  
  9684.  
  9685. intbase: dc.l 0
  9686. gfxbase: dc.l 0
  9687. oldview: dc.l 0
  9688.  
  9689. stuff:
  9690.  
  9691.     PRSDL
  9692.     Lea    gfxname(pc),a1    
  9693.     Moveq.l    #0,d0
  9694.     Move.l    $4.w,a6    
  9695.     Jsr    -$228(a6)
  9696.     add.w d1,RVAL1
  9697.     Move.l     d0,gfxbase
  9698.     Move.l    d0,a6                Use As Base Reg
  9699.     Move.l    34(a6),oldview
  9700.     move.l 38(a6),old
  9701.     rts
  9702.  
  9703. gfxname dc.b "graphics.library",0
  9704.  even
  9705. INTUNAME    dc.b    "intuition.library",0
  9706.  
  9707.  even
  9708.  
  9709.  
  9710.  cnop 0,64
  9711.  
  9712. Panel:
  9713.  dc.l 0
  9714.  
  9715. TimerScr: 
  9716. ;ds.b 40*64
  9717.  
  9718. scrntab:
  9719.  ds.b 16
  9720. val SET 32
  9721.  REPT 96
  9722.  dc.b val,val,val
  9723. val SET val+1
  9724.  ENDR
  9725.  ds.b 16
  9726.  
  9727. smallscrntab:
  9728. val SET 32
  9729.  REPT 96
  9730.  dc.b val,val
  9731. val SET val+1
  9732.  ENDR
  9733.  
  9734.  cnop 0,64
  9735. scrn:
  9736.  
  9737.  dcb.l 8,$33333333
  9738.  dc.l 0
  9739.  dc.l 0
  9740.  
  9741.  dcb.l 8,$0f0f0f0f
  9742.  dc.l 0
  9743.  dc.l 0
  9744.  
  9745.  dcb.l 8,$00ff00ff
  9746.  dc.l 0
  9747.  dc.l 0
  9748.  
  9749.  dcb.l 8,$0000ffff
  9750.  dc.l 0
  9751.  dc.l 0
  9752.  
  9753.  dc.l 0,-1,0,-1,0,-1,0,-1
  9754.  dc.l 0
  9755.  dc.l 0
  9756.  
  9757.  dc.l -1,-1,0,0,-1,-1,0,0
  9758.  dc.l 0
  9759.  dc.l 0
  9760.  
  9761.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  9762.  dc.l 0
  9763.  dc.l 0
  9764.  
  9765. NumTimes: dc.l 0
  9766. TimeCount: dc.l 0
  9767. oldtime: dc.l 0
  9768. counting: dc.b 0
  9769. oktodisplay: dc.b 0
  9770.  
  9771. INITTIMER:
  9772.  move.l #0,TimeCount
  9773.  move.l #0,NumTimes
  9774.  rts
  9775.  
  9776. STARTCOUNT:
  9777.  move.l d0,-(a7)
  9778.  move.l $dff004,d0
  9779.  and.l #$1ffff,d0
  9780.  move.l d0,oldtime
  9781.  st counting
  9782.  move.l (a7)+,d0
  9783.  rts
  9784.  
  9785. STOPCOUNT:
  9786.  move.l d0,-(a7)
  9787.  move.l $dff004,d0
  9788.  and.l #$1ffff,d0
  9789.  
  9790.  sub.l oldtime,d0
  9791.  cmp.l #-256,d0
  9792.  bge.s okcount
  9793.  add.l #313*256,d0
  9794. okcount:
  9795.  add.l d0,TimeCount
  9796.  addq.l #1,NumTimes
  9797.  clr.b counting
  9798.  move.l (a7)+,d0
  9799.  rts
  9800.  
  9801. STOPCOUNTNOADD:
  9802.  move.l d0,-(a7)
  9803.  move.l $dff004,d0
  9804.  and.l #$1ffff,d0
  9805.  
  9806.  sub.l oldtime,d0
  9807.  cmp.l #-256,d0
  9808.  bge.s okcount2
  9809.  add.l #313*256,d0
  9810. okcount2:
  9811.  add.l d0,TimeCount
  9812.  clr.b counting
  9813.  move.l (a7)+,d0
  9814.  rts
  9815.  
  9816. maxbot: dc.w 0
  9817. tstneg: dc.l 0
  9818.  
  9819. STOPTIMER:
  9820.  st oktodisplay
  9821.  rts
  9822.  
  9823. digits: incbin "numbers.inc"
  9824.  
  9825.  
  9826.  Section Sounds,CODE_C
  9827.  
  9828. nullcop:
  9829.  dc.w $106,$c40
  9830.  dc.w $180,0 
  9831.  dc.w $100,$0
  9832.  dc.w $ffff,$fffe
  9833.  
  9834. Scream:
  9835. ; incbin "ab3:sounds/Scream"
  9836. ; ds.w 100
  9837. EndScream:
  9838. LowScream:
  9839. ; incbin "ab3:sounds/LowScream"
  9840. ; ds.w 100
  9841. EndLowScream:
  9842. BaddieGun:
  9843. ; incbin "ab3:sounds/BaddieGun"
  9844. EndBaddieGun:
  9845. bass:
  9846. ; incbin "ab3:sounds/backbass+drum"
  9847. bassend:
  9848. Shoot:
  9849. ; incbin "ab3:sounds/fire!"
  9850. EndShoot:
  9851. Munch:
  9852. ; incbin "ab3:sounds/munch"
  9853. EndMunch:
  9854. PooGun:
  9855. ; incbin "ab3:sounds/shoot.dm"
  9856. EndPooGun:
  9857. Collect:
  9858. ; incbin "ab3:sounds/collect"
  9859. EndCollect:
  9860. DoorNoise:
  9861. ; incbin "ab3:sounds/newdoor"
  9862. EndDoorNoise:
  9863. Stomp:
  9864. ; incbin "ab3:sounds/footstep3"
  9865. EndStomp:
  9866. SwitchNoise:
  9867. ; incbin "ab3:sounds/switch"
  9868. EndSwitch:
  9869. Reload:
  9870. ; incbin "ab3:sounds/switch1.SFX"
  9871. EndReload:
  9872.  
  9873. CHEATFRAME:
  9874.  dc.b 26,20,33,27,17,12
  9875. ENDCHEAT:
  9876.  
  9877. NoAmmo:
  9878. ; incbin "ab3:sounds/noammo"
  9879. EndNoAmmo:
  9880. Splotch:
  9881. ; incbin "ab3:sounds/splotch"
  9882. EndSplotch:
  9883. SplatPop:
  9884. ; incbin "ab3:sounds/splatpop"
  9885. EndSplatPop:
  9886. Boom:
  9887. ; incbin "ab3:sounds/boom"
  9888. EndBoom:
  9889. Hiss:
  9890. ; incbin "ab3:sounds/newhiss"
  9891. EndHiss:
  9892. Howl1:
  9893. ; incbin "ab3:sounds/howl1"
  9894. EndHowl1:
  9895. Howl2:
  9896. ; incbin "ab3:sounds/howl2"
  9897. EndHowl2:
  9898. Pant:
  9899. ; incbin "ab3:sounds/pant"
  9900. EndPant:
  9901. Whoosh:
  9902. ; incbin "ab3:sounds/whoosh"
  9903. EndWhoosh:
  9904. ROAR:
  9905. ; incbin "ab3:sounds/bigscream"
  9906. EndROAR
  9907. whoosh:
  9908. ; incbin "ab3:sounds/flame"
  9909. Endwhoosh:
  9910.  SECTION music,code_c
  9911.  
  9912. UseAllChannels: dc.w 0
  9913.  
  9914. mt_init:move.l    mt_data,a0
  9915.     move.l    a0,a1
  9916.     add.l    #$3b8,a1
  9917.     moveq    #$7f,d0
  9918.     moveq    #0,d1
  9919. mt_loop:move.l    d1,d2
  9920.     subq.w    #1,d0
  9921. mt_lop2:move.b    (a1)+,d1
  9922.     cmp.b    d2,d1
  9923.     bgt.s    mt_loop
  9924.     dbf    d0,mt_lop2
  9925.     addq.b    #1,d2
  9926.  
  9927.     lea    mt_samplestarts(pc),a1
  9928.     asl.l    #8,d2
  9929.     asl.l    #2,d2
  9930.     add.l    #$43c,d2
  9931.     add.l    a0,d2
  9932.     move.l    d2,a2
  9933.     moveq    #$1e,d0
  9934. mt_lop3:clr.l    (a2)
  9935.     move.l    a2,(a1)+
  9936.     moveq    #0,d1
  9937.     move.w    42(a0),d1
  9938.     asl.l    #1,d1
  9939.     add.l    d1,a2
  9940.     add.l    #$1e,a0
  9941.     dbf    d0,mt_lop3
  9942.  
  9943.     or.b    #$2,$bfe001
  9944.     move.b    #$6,mt_speed
  9945.     clr.w    $dff0a8
  9946.     clr.w    $dff0b8
  9947.     clr.w    $dff0c8
  9948.     clr.w    $dff0d8
  9949.     clr.b    mt_songpos
  9950.     clr.b    mt_counter
  9951.     clr.w    mt_pattpos
  9952.     rts
  9953.  
  9954. mt_end:    clr.w    $dff0a8
  9955.     clr.w    $dff0b8
  9956.     clr.w    $dff0c8
  9957.     clr.w    $dff0d8
  9958.     move.w    #$f,$dff096
  9959.     rts
  9960.  
  9961. mt_music:
  9962.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  9963.     move.l    mt_data,a0
  9964.     addq.b    #$1,mt_counter
  9965.     move.b    mt_counter,D0
  9966.     cmp.b    mt_speed,D0
  9967.     blt.s    mt_nonew
  9968.     clr.b    mt_counter
  9969.     bra    mt_getnew
  9970.  
  9971. mt_nonew:
  9972.     lea    mt_voice1(pc),a6
  9973.     lea    $dff0a0,a5
  9974.     bsr    mt_checkcom
  9975.     lea    mt_voice2(pc),a6
  9976.     lea    $dff0b0,a5
  9977.     bsr    mt_checkcom
  9978.     tst.b UseAllChannels
  9979.     beq mt_endr
  9980.      lea    mt_voice3(pc),a6
  9981.     lea    $dff0c0,a5
  9982.     bsr    mt_checkcom
  9983.     lea    mt_voice4(pc),a6
  9984.     lea    $dff0d0,a5
  9985.     bsr    mt_checkcom
  9986.     bra    mt_endr
  9987.  
  9988. mt_arpeggio:
  9989.     moveq    #0,d0
  9990.     move.b    mt_counter,d0
  9991.     divs    #$3,d0
  9992.     swap    d0
  9993.     cmp.w    #$0,d0
  9994.     beq.s    mt_arp2
  9995.     cmp.w    #$2,d0
  9996.     beq.s    mt_arp1
  9997.  
  9998.     moveq    #0,d0
  9999.     move.b    $3(a6),d0
  10000.     lsr.b    #4,d0
  10001.     bra.s    mt_arp3
  10002. mt_arp1:moveq    #0,d0
  10003.     move.b    $3(a6),d0
  10004.     and.b    #$f,d0
  10005.     bra.s    mt_arp3
  10006. mt_arp2:move.w    $10(a6),d2
  10007.     bra.s    mt_arp4
  10008. mt_arp3:asl.w    #1,d0
  10009.     moveq    #0,d1
  10010.     move.w    $10(a6),d1
  10011.     lea    mt_periods(pc),a0
  10012.     moveq    #$24,d7
  10013. mt_arploop:
  10014.     move.w    (a0,d0.w),d2
  10015.     cmp.w    (a0),d1
  10016.     bge.s    mt_arp4
  10017.     addq.l    #2,a0
  10018.     dbf    d7,mt_arploop
  10019.     rts
  10020. mt_arp4:move.w    d2,$6(a5)
  10021.     rts
  10022.  
  10023. mt_getnew:
  10024.     move.l    mt_data,a0
  10025.     move.l    a0,a3
  10026.     move.l    a0,a2
  10027.     add.l    #$c,a3
  10028.     add.l    #$3b8,a2
  10029.     add.l    #$43c,a0
  10030.  
  10031.     moveq    #0,d0
  10032.     move.l    d0,d1
  10033.     move.b    mt_songpos,d0
  10034.     move.b    (a2,d0.w),d1
  10035.     asl.l    #8,d1
  10036.     asl.l    #2,d1
  10037.     add.w    mt_pattpos,d1
  10038.     clr.w    mt_dmacon
  10039.  
  10040.     lea    $dff0a0,a5
  10041.     lea    mt_voice1(pc),a6
  10042.     bsr    mt_playvoice
  10043.     lea    $dff0b0,a5
  10044.     lea    mt_voice2(pc),a6
  10045.     bsr    mt_playvoice
  10046.     tst.b UseAllChannels
  10047.     beq mt_setdma
  10048.     lea    $dff0c0,a5
  10049.     lea    mt_voice3(pc),a6
  10050.     bsr    mt_playvoice
  10051.     lea    $dff0d0,a5
  10052.     lea    mt_voice4(pc),a6
  10053.     bsr    mt_playvoice
  10054.     bra    mt_setdma
  10055.  
  10056. PROTCALC:
  10057. ;    include "ab3:source/protcalc.s"
  10058.     incbin "ab3:includes/protcalc.bin"
  10059. ENDPROTCALC:
  10060.  
  10061. mt_playvoice:
  10062.     move.l    (a0,d1.l),(a6)
  10063.     addq.l    #4,d1
  10064.     moveq    #0,d2
  10065.     move.b    $2(a6),d2
  10066.     and.b    #$f0,d2
  10067.     lsr.b    #4,d2
  10068.     move.b    (a6),d0
  10069.     and.b    #$f0,d0
  10070.     or.b    d0,d2
  10071.     tst.b    d2
  10072.     beq.s    mt_setregs
  10073.     moveq    #0,d3
  10074.     lea    mt_samplestarts(pc),a1
  10075.     move.l    d2,d4
  10076.     subq.l    #$1,d2
  10077.     asl.l    #2,d2
  10078.     mulu    #$1e,d4
  10079.     move.l    (a1,d2.l),$4(a6)
  10080.     move.w    (a3,d4.l),$8(a6)
  10081.     move.w    $2(a3,d4.l),$12(a6)
  10082.     move.w    $4(a3,d4.l),d3
  10083.     tst.w    d3
  10084.     beq.s    mt_noloop
  10085.     move.l    $4(a6),d2
  10086.     asl.w    #1,d3
  10087.     add.l    d3,d2
  10088.     move.l    d2,$a(a6)
  10089.     move.w    $4(a3,d4.l),d0
  10090.     add.w    $6(a3,d4.l),d0
  10091.     move.w    d0,8(a6)
  10092.     move.w    $6(a3,d4.l),$e(a6)
  10093.     move.w    $12(a6),d0
  10094.     asr.w #2,d0
  10095.     move.w d0,$8(a5)
  10096.     bra.s    mt_setregs
  10097. mt_noloop:
  10098.     move.l    $4(a6),d2
  10099.     add.l    d3,d2
  10100.     move.l    d2,$a(a6)
  10101.     move.w    $6(a3,d4.l),$e(a6)
  10102.     move.w    $12(a6),d0
  10103.     asr.w #2,d0
  10104.     move.w d0,$8(a5)
  10105. mt_setregs:
  10106.     move.w    (a6),d0
  10107.     and.w    #$fff,d0
  10108.     beq    mt_checkcom2
  10109.     move.b    $2(a6),d0
  10110.     and.b    #$F,d0
  10111.     cmp.b    #$3,d0
  10112.     bne.s    mt_setperiod
  10113.     bsr    mt_setmyport
  10114.     bra    mt_checkcom2
  10115. mt_setperiod:
  10116.     move.w    (a6),$10(a6)
  10117.     and.w    #$fff,$10(a6)
  10118.     move.w    $14(a6),d0
  10119.     move.w    d0,$dff096
  10120.     clr.b    $1b(a6)
  10121.  
  10122.     move.l    $4(a6),(a5)
  10123.     move.w    $8(a6),$4(a5)
  10124.     move.w    $10(a6),d0
  10125.     and.w    #$fff,d0
  10126.     move.w    d0,$6(a5)
  10127.     move.w    $14(a6),d0
  10128.     or.w    d0,mt_dmacon
  10129.     bra    mt_checkcom2
  10130.  
  10131. mt_setdma:
  10132.      move.w #250,d0
  10133. mt_wait:
  10134.      add.w #1,testchip
  10135.      dbra d0,mt_wait
  10136.     move.w    mt_dmacon,d0
  10137.     or.w    #$8000,d0
  10138.     and.w #%1111111111110011,d0
  10139.     move.w    d0,$dff096
  10140.     move.w #250,d0
  10141. mt_wait2:
  10142.     add.w #1,testchip
  10143.     dbra    d0,mt_wait2
  10144.     lea    $dff000,a5
  10145.     tst.b UseAllChannels
  10146.     beq.s noall
  10147.     lea    mt_voice4(pc),a6
  10148.     move.l    $a(a6),$d0(a5)
  10149.     move.w    $e(a6),$d4(a5)
  10150.     lea    mt_voice3(pc),a6
  10151.     move.l    $a(a6),$c0(a5)
  10152.     move.w    $e(a6),$c4(a5)
  10153. noall:
  10154.     lea    mt_voice2(pc),a6
  10155.     move.l    $a(a6),$b0(a5)
  10156.     move.w    $e(a6),$b4(a5)
  10157.     lea    mt_voice1(pc),a6
  10158.     move.l    $a(a6),$a0(a5)
  10159.     move.w    $e(a6),$a4(a5)
  10160.  
  10161.     add.w    #$10,mt_pattpos
  10162.     cmp.w    #$400,mt_pattpos
  10163.     bne.s    mt_endr
  10164. mt_nex:    clr.w    mt_pattpos
  10165.     clr.b    mt_break
  10166.     addq.b    #1,mt_songpos
  10167.     and.b    #$7f,mt_songpos
  10168.     move.b    mt_songpos,d1
  10169. ;    cmp.b    mt_data+$3b6,d1
  10170. ;    bne.s    mt_endr
  10171. ;    move.b    mt_data+$3b7,mt_songpos
  10172. mt_endr:tst.b    mt_break
  10173.     bne.s    mt_nex
  10174.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  10175.     rts
  10176.  
  10177. mt_setmyport:
  10178.     move.w    (a6),d2
  10179.     and.w    #$fff,d2
  10180.     move.w    d2,$18(a6)
  10181.     move.w    $10(a6),d0
  10182.     clr.b    $16(a6)
  10183.     cmp.w    d0,d2
  10184.     beq.s    mt_clrport
  10185.     bge.s    mt_rt
  10186.     move.b    #$1,$16(a6)
  10187.     rts
  10188. mt_clrport:
  10189.     clr.w    $18(a6)
  10190. mt_rt:    rts
  10191.  
  10192. CODESTORE: dc.l 0
  10193.  
  10194. mt_myport:
  10195.     move.b    $3(a6),d0
  10196.     beq.s    mt_myslide
  10197.     move.b    d0,$17(a6)
  10198.     clr.b    $3(a6)
  10199. mt_myslide:
  10200.     tst.w    $18(a6)
  10201.     beq.s    mt_rt
  10202.     moveq    #0,d0
  10203.     move.b    $17(a6),d0
  10204.     tst.b    $16(a6)
  10205.     bne.s    mt_mysub
  10206.     add.w    d0,$10(a6)
  10207.     move.w    $18(a6),d0
  10208.     cmp.w    $10(a6),d0
  10209.     bgt.s    mt_myok
  10210.     move.w    $18(a6),$10(a6)
  10211.     clr.w    $18(a6)
  10212. mt_myok:move.w    $10(a6),$6(a5)
  10213.     rts
  10214. mt_mysub:
  10215.     sub.w    d0,$10(a6)
  10216.     move.w    $18(a6),d0
  10217.     cmp.w    $10(a6),d0
  10218.     blt.s    mt_myok
  10219.     move.w    $18(a6),$10(a6)
  10220.     clr.w    $18(a6)
  10221.     move.w    $10(a6),$6(a5)
  10222.     rts
  10223.  
  10224. mt_vib:    move.b    $3(a6),d0
  10225.     beq.s    mt_vi
  10226.     move.b    d0,$1a(a6)
  10227.  
  10228. mt_vi:    move.b    $1b(a6),d0
  10229.     lea    mt_sin(pc),a4
  10230.     lsr.w    #$2,d0
  10231.     and.w    #$1f,d0
  10232.     moveq    #0,d2
  10233.     move.b    (a4,d0.w),d2
  10234.     move.b    $1a(a6),d0
  10235.     and.w    #$f,d0
  10236.     mulu    d0,d2
  10237.     lsr.w    #$6,d2
  10238.     move.w    $10(a6),d0
  10239.     tst.b    $1b(a6)
  10240.     bmi.s    mt_vibmin
  10241.     add.w    d2,d0
  10242.     bra.s    mt_vib2
  10243. mt_vibmin:
  10244.     sub.w    d2,d0
  10245. mt_vib2:move.w    d0,$6(a5)
  10246.     move.b    $1a(a6),d0
  10247.     lsr.w    #$2,d0
  10248.     and.w    #$3c,d0
  10249.     add.b    d0,$1b(a6)
  10250.     rts
  10251.  
  10252. mt_nop:    move.w    $10(a6),$6(a5)
  10253.     rts
  10254.  
  10255.  
  10256. mt_checkcom:
  10257.     move.w    $2(a6),d0
  10258.     and.w    #$fff,d0
  10259.     beq.s    mt_nop
  10260.     move.b    $2(a6),d0
  10261.     and.b    #$f,d0
  10262.     tst.b    d0
  10263.     beq    mt_arpeggio
  10264.     cmp.b    #$1,d0
  10265.     beq.s    mt_portup
  10266.     cmp.b    #$2,d0
  10267.     beq    mt_portdown
  10268.     cmp.b    #$3,d0
  10269.     beq    mt_myport
  10270.     cmp.b    #$4,d0
  10271.     beq    mt_vib
  10272.     move.w    $10(a6),$6(a5)
  10273.     cmp.b    #$a,d0
  10274.     beq.s    mt_volslide
  10275.     rts
  10276.  
  10277. mt_volslide:
  10278.     moveq    #0,d0
  10279.     move.b    $3(a6),d0
  10280.     lsr.b    #4,d0
  10281.     tst.b    d0
  10282.     beq.s    mt_voldown
  10283.     add.w    d0,$12(a6)
  10284.     cmp.w    #$40,$12(a6)
  10285.     bmi.s    mt_vol2
  10286.     move.w    #$40,$12(a6)
  10287. mt_vol2:move.w    $12(a6),d0
  10288.     asr.w #2,d0
  10289.     move.w d0,$8(a5)
  10290.     rts
  10291.  
  10292. mt_voldown:
  10293.     moveq    #0,d0
  10294.     move.b    $3(a6),d0
  10295.     and.b    #$f,d0
  10296.     sub.w    d0,$12(a6)
  10297.     bpl.s    mt_vol3
  10298.     clr.w    $12(a6)
  10299. mt_vol3:move.w    $12(a6),d0
  10300.     asr.w #2,d0
  10301.     move.w d0,$8(a5)
  10302.     rts
  10303.  
  10304. mt_portup:
  10305.     moveq    #0,d0
  10306.     move.b    $3(a6),d0
  10307.     sub.w    d0,$10(a6)
  10308.     move.w    $10(a6),d0
  10309.     and.w    #$fff,d0
  10310.     cmp.w    #$71,d0
  10311.     bpl.s    mt_por2
  10312.     and.w    #$f000,$10(a6)
  10313.     or.w    #$71,$10(a6)
  10314. mt_por2:move.w    $10(a6),d0
  10315.     and.w    #$fff,d0
  10316.     move.w    d0,$6(a5)
  10317.     rts
  10318.  
  10319. mt_portdown:
  10320.     clr.w    d0
  10321.     move.b    $3(a6),d0
  10322.     add.w    d0,$10(a6)
  10323.     move.w    $10(a6),d0
  10324.     and.w    #$fff,d0
  10325.     cmp.w    #$358,d0
  10326.     bmi.s    mt_por3
  10327.     and.w    #$f000,$10(a6)
  10328.     or.w    #$358,$10(a6)
  10329. mt_por3:move.w    $10(a6),d0
  10330.     and.w    #$fff,d0
  10331.     move.w    d0,$6(a5)
  10332.     rts
  10333.  
  10334. mt_checkcom2:
  10335.     move.b    $2(a6),d0
  10336.     and.b    #$f,d0
  10337.     cmp.b    #$e,d0
  10338.     beq.s    mt_setfilt
  10339.     cmp.b    #$d,d0
  10340.     beq.s    mt_pattbreak
  10341.     cmp.b    #$b,d0
  10342.     beq.s    mt_posjmp
  10343.     cmp.b    #$c,d0
  10344.     beq.s    mt_setvol
  10345.     cmp.b    #$f,d0
  10346.     beq.s    mt_setspeed
  10347.     rts
  10348.  
  10349. mt_setfilt:
  10350.     move.b    $3(a6),d0
  10351.     and.b    #$1,d0
  10352.     asl.b    #$1,d0
  10353.     and.b    #$fd,$bfe001
  10354.     or.b    d0,$bfe001
  10355.     rts
  10356. mt_pattbreak:
  10357.     not.b    mt_break
  10358.     rts
  10359. mt_posjmp:
  10360.     st reachedend
  10361.     move.b    $3(a6),d0
  10362.     subq.b    #$1,d0
  10363.     move.b    d0,mt_songpos
  10364.     not.b    mt_break
  10365.     rts
  10366. mt_setvol:
  10367.     cmp.b    #$40,$3(a6)
  10368.     ble.s    mt_vol4
  10369.     move.b    #$40,$3(a6)
  10370. mt_vol4:move.b    $3(a6),d0
  10371.     asr.w #2,d0
  10372.     move.w d0,$8(a5)
  10373.     rts
  10374. mt_setspeed:
  10375.     cmp.b    #$1f,$3(a6)
  10376.     ble.s    mt_sets
  10377.     move.b    #$1f,$3(a6)
  10378. mt_sets:move.b    $3(a6),d0
  10379.     beq.s    mt_rts2
  10380.     move.b    d0,mt_speed
  10381.     clr.b    mt_counter
  10382. mt_rts2:rts
  10383.  
  10384. mt_sin:
  10385.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10386.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10387.  
  10388. mt_periods:
  10389.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10390.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10391.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10392.  DC.w $007f,$0078,$0071,$0000,$0000
  10393.  
  10394. reachedend: dc.b 0
  10395. mt_speed:    DC.b    6
  10396. mt_songpos:    DC.b    0
  10397. mt_pattpos:    DC.w    0
  10398. mt_counter:    DC.b    0
  10399.  
  10400. mt_break:    DC.b    0
  10401. mt_dmacon:    DC.w    0
  10402. mt_samplestarts:DS.L    $1f
  10403. mt_voice1:    DS.w    10
  10404.         DC.w    1
  10405.         DS.w    3
  10406. mt_voice2:    DS.w    10
  10407.         DC.w    2
  10408.         DS.w    3
  10409. mt_voice3:    DS.w    10
  10410.         DC.w    4
  10411.         DS.w    3
  10412. mt_voice4:    DS.w    10
  10413.         DC.w    8
  10414.         DS.w    3
  10415.  
  10416. CHEATPTR: dc.l 0
  10417. CHEATNUM: dc.l 0
  10418.  
  10419. testchip: dc.w 0
  10420.  
  10421. ;/* End of File */
  10422. mt_data: dc.l 0
  10423. tstchip: dc.l 0
  10424.  include "SERIAL_NIGHTMARE"
  10425.  
  10426. ingame:
  10427. ; incbin "ab3:includes/ingame"
  10428. gameover: incbin "ab3:includes/gameover"
  10429. welldone: incbin "ab3:includes/welldone"
  10430.  
  10431.  
  10432.     section    code,code
  10433.  
  10434.     incdir    include:
  10435.     include graphics/modeid.i
  10436.  
  10437. Team17ScreenWidth        equ    640
  10438. Team17ScreenHeight        equ    1700
  10439. Team17ScreenDepth        equ    1
  10440.  
  10441. _LVOScreenPosition    EQU    -792
  10442.  
  10443.  
  10444. PIC_SIZE    equ 128004+(640*40)
  10445. TEMP_SIZE    equ 18500
  10446.  
  10447.  
  10448. docredits:
  10449.     move.l        #MEMF_CLEAR,d1
  10450.     move.l        #TEMP_SIZE,d0
  10451.     CALLEXEC    AllocMem
  10452.     tst.l        d0
  10453.     beq        QuitE
  10454.  
  10455.     move.l        d0,TempPtr
  10456.  
  10457.     lea        DosName(pc),a1        ; graphics.library
  10458.     CALLEXEC     OldOpenLibrary        ; Open gfx lib
  10459.     move.l        d0,_DOSBase            ; store ptr
  10460.     tst.l        d0                ; Failed to open GFX lib ?
  10461.     beq        QuitF                ; yes, jump to end
  10462.  
  10463.  
  10464.     move.l        #FileName,d1
  10465.     move.l        #MODE_OLDFILE,d2
  10466.     CALLDOS    Open
  10467.     tst.l        d0
  10468.     beq        QuitCloseDos
  10469.  
  10470.     move.l        d0,d1
  10471.     move.l        d1,-(sp)
  10472.     move.l        TempPtr,d2
  10473.     move.l        #TEMP_SIZE,d3
  10474.     CALLDOS    Read
  10475.  
  10476.     move.l        (sp)+,d1
  10477.     CALLDOS    Close
  10478.  
  10479.  
  10480. ; decompress pic
  10481.  
  10482.  
  10483.     move.l        #MEMF_CHIP|MEMF_CLEAR,d1
  10484.     move.l        #PIC_SIZE,d0
  10485.     CALLEXEC    AllocMem
  10486.     tst.l        d0
  10487.     beq        QuitCloseDos
  10488.     
  10489.  
  10490.     move.l        d0,jPlane1            ; chip mem..
  10491.  
  10492.  
  10493.  
  10494.     move.l        TempPtr,d0            ; source
  10495.     moveq        #0,d1
  10496.     move.l        jPlane1,a0            ; destination
  10497.     add.l        #640*20,a0
  10498.     lea        WorkSpace,a1            ; workspace
  10499.     lea        $0,a2                ; dunno ?
  10500.     jsr        unLHA
  10501.  
  10502.     move.l        TempPtr(pc),a1
  10503.     move.l        #TEMP_SIZE,d0
  10504.     CALLEXEC    FreeMem
  10505.     
  10506.     CALLEXEC    Forbid
  10507.     CALLEXEC    Disable
  10508.  
  10509.     lea        GfxName(pc),a1        ; graphics.library
  10510.     CALLEXEC     OldOpenLibrary        ; Open gfx lib
  10511.     move.l        d0,_GfxBase            ; store ptr
  10512.     tst.l        d0                ; Failed to open GFX lib ?
  10513.     beq        QuitCloseGfx            ; yes, jump to end
  10514.  
  10515.     move.w        #%100000,$dff096
  10516.     move.l        d0,a1
  10517.     move.l        $26(a1),$dff080     ; restore system clist
  10518.     move.w        #%100000,$dff096
  10519.  
  10520.     lea        IntuiName(pc),a1        ; intuition.library
  10521.     CALLEXEC    OldOpenLibrary        ; Open it
  10522.     move.l        d0,_IntuitionBase        ; Store ptr to library
  10523.     tst.l        d0
  10524.     beq        QuitCloseInt
  10525.     move.w        #%100000,$dff096
  10526.  
  10527.     move.w        #%100000,$dff096
  10528.     lea        Team17BitMap(pc),a0        ; Our bitmap struct
  10529.     move.b        #Team17ScreenDepth,d0    ; depth of screen
  10530.     move.w        #Team17ScreenWidth,d1    ; width of screen
  10531.     move.w        #Team17ScreenHeight,d2    ; height of screen
  10532.     CALLGRAF    InitBitMap            ; Setup Bitmap Struct
  10533.     move.w        #%100000,$dff096
  10534.  
  10535.     lea        Team17NewScreen(pc),a0    ; Open Logo screen
  10536.     lea        Team17TagList(pc),a1
  10537.     CALLINT    OpenScreenTagList
  10538.     move.l        d0,Team17ScreenBase        ; store screenbase
  10539.     move.w        #%100000,$dff096
  10540.  
  10541.     add.l        #44,d0
  10542.     move.l        d0,a0                ; sc_ViewPort
  10543.     move.l        d0,Team17ViewPort        ; store value
  10544.  
  10545.     lea        Team17Palette(pc),a1        ; Do Palette for logo
  10546.     move.l        #PaletteSize/2,d0
  10547.     CALLGRAF     LoadRGB4            ; Load Palette
  10548.  
  10549.  
  10550.     move.l        Team17ScreenBase(pc),a0
  10551.     CALLINT    ScreenToFront
  10552.  
  10553. rewait
  10554.  
  10555.     move.w        #%100000,$dff096
  10556.     move.l        d0,-(sp)
  10557.     CALLGRAF    WaitTOF
  10558.     CALLGRAF    WaitTOF
  10559.     move.w        #%100000,$dff096
  10560.     move.l        (sp)+,d0
  10561.  
  10562.     move.l        Team17ScreenBase(pc),a0
  10563.     move.l        #0,d1
  10564.     move.l        #-1,d2
  10565.     add.l        #1,counter
  10566.     cmp.l        #2010,counter
  10567.     blo.b        skipper
  10568.     move.l        #0,counter
  10569.  
  10570.     move.l        #1,d0
  10571.     move.l        #0,d1
  10572.     move.l        #0,d2
  10573.     move.l        #0,d3
  10574.     move.l        #0,d4
  10575.     CALLINT    ScreenPosition
  10576.     jmp        tata
  10577.  
  10578. skipper
  10579.  
  10580.     move.l        #0,d3
  10581.     move.l        #0,d4
  10582.  
  10583.      moveq        #0,d0    
  10584.  
  10585.     CALLINT    ScreenPosition
  10586. tata
  10587.  
  10588. ;    btst.b        #6,$bfe001                ; tes mouse button
  10589. ;    beq        out
  10590.  
  10591. ;    cmp.l        #'WORM',0
  10592. ;    beq.b        out
  10593.  
  10594.     jmp        rewait
  10595.  
  10596. counter    dc.l    0
  10597.  
  10598. out
  10599.     move.l        Team17ScreenBase(pc),a0
  10600.     CALLINT    CloseScreen
  10601.  
  10602.  
  10603. QuitCloseInt
  10604.     move.l        _IntuitionBase(pc),a1
  10605.     CALLEXEC    CloseLibrary
  10606.  
  10607. QuitCloseGfx
  10608.     move.l        _GfxBase(pc),a1
  10609.     CALLEXEC    CloseLibrary
  10610.  
  10611. QuitCloseDos
  10612.     move.l        _DOSBase(pc),a1
  10613.     CALLEXEC    CloseLibrary
  10614.  
  10615. QuitF
  10616.  
  10617.     move.l        jPlane1,a1
  10618.     move.l        #PIC_SIZE,d0
  10619.     CALLEXEC    FreeMem
  10620.  
  10621. QuitE
  10622.     moveq        #0,d0
  10623.     rts
  10624. FileName
  10625.     dc.b    'ab3d2:credpic',0
  10626.     even
  10627.  
  10628.  
  10629. Team17TagList
  10630.     dc.l    SA_AutoScroll,1
  10631.     dc.l    SA_Overscan,1
  10632.     dc.l    TAG_DONE
  10633.     
  10634.     even
  10635. Team17NewScreen
  10636.     dc.w    0                        ; LeftEdge
  10637.     dc.w    0                        ; TopEdge
  10638.     dc.w    Team17ScreenWidth                ; Width    
  10639.     dc.w    Team17ScreenHeight                ; Height
  10640.     dc.w    Team17ScreenDepth                ; Depth
  10641.     dc.b    0                        ; DetailPen
  10642.     dc.b    0                        ; BlockPen
  10643.     dc.w    HIRES_KEY                        ; ViewModes
  10644.     dc.w    CUSTOMBITMAP|SCREENQUIET|SCREENBEHIND    ; Type
  10645.  
  10646.     ; SCREENQUIET is a new wb2 type which stops the titlebar/gadgets
  10647.     ; being initialized
  10648.  
  10649.     dc.l    0        ; Font
  10650.     dc.l    0        ; DefaultTitle
  10651.     dc.l    0        ; Gadgets    
  10652.     dc.l    Team17BitMap    ; CustomBitMap
  10653.     dc.l    0,0
  10654.  
  10655.  
  10656. Team17BitMap
  10657.     dc.w    0        ; Bytes Per Row
  10658.     dc.w    0        ; Rows
  10659.     dc.b    0        ; Flags
  10660.     dc.b    0        ; Depth
  10661.     dc.w    0        ; pad    
  10662. jPlane1
  10663.     dc.l    0               ; Planes[0] ptr to bitmap
  10664.     dc.l    0
  10665.  
  10666.  
  10667. IntuiName
  10668.     dc.b    'intuition.library',0
  10669.  
  10670.     even
  10671.  
  10672. _IntuitionBase
  10673.     dc.l    0
  10674.  
  10675. GfxName
  10676.     dc.b    'graphics.library',0
  10677.     even
  10678.  
  10679. _GfxBase
  10680.     dc.l    0
  10681.  
  10682. DosName
  10683.     dc.b    'dos.library',0
  10684.     even
  10685.  
  10686. _DOSBase
  10687.     dc.l    0
  10688.     
  10689. Team17ScreenBase
  10690.     dc.l    0
  10691.  
  10692. Team17LogoPort
  10693.     dc.l    0
  10694.  
  10695. Team17ViewPort
  10696.     dc.l    0
  10697.  
  10698. Team17Palette
  10699.     dc.w    0,$0fff
  10700.  
  10701.  
  10702. TempPtr
  10703.     dc.l    0
  10704.  
  10705. PaletteSize    equ    *-Team17Palette
  10706.